diff options
Diffstat (limited to 'chromium/ui/compositor')
-rw-r--r-- | chromium/ui/compositor/BUILD.gn | 29 | ||||
-rw-r--r-- | chromium/ui/compositor/animation_metrics_reporter.h | 20 | ||||
-rw-r--r-- | chromium/ui/compositor/animation_throughput_reporter.cc | 36 | ||||
-rw-r--r-- | chromium/ui/compositor/animation_throughput_reporter_unittest.cc | 43 | ||||
-rw-r--r-- | chromium/ui/compositor/compositor.cc | 14 | ||||
-rw-r--r-- | chromium/ui/compositor/compositor.h | 11 | ||||
-rw-r--r-- | chromium/ui/compositor/compositor_observer.h | 2 | ||||
-rw-r--r-- | chromium/ui/compositor/compositor_switches.cc | 2 | ||||
-rw-r--r-- | chromium/ui/compositor/float_animation_curve_adapter.cc | 6 | ||||
-rw-r--r-- | chromium/ui/compositor/layer.cc | 3 | ||||
-rw-r--r-- | chromium/ui/compositor/layer.h | 4 | ||||
-rw-r--r-- | chromium/ui/compositor/layer_animation_element.cc | 2 | ||||
-rw-r--r-- | chromium/ui/compositor/layer_animator_unittest.cc | 11 | ||||
-rw-r--r-- | chromium/ui/compositor/layer_unittest.cc | 2 | ||||
-rw-r--r-- | chromium/ui/compositor/test/test_compositor_host_ozone.cc | 45 | ||||
-rw-r--r-- | chromium/ui/compositor/test/test_compositor_host_ozone.h | 44 | ||||
-rw-r--r-- | chromium/ui/compositor/transform_animation_curve_adapter.cc | 5 |
17 files changed, 188 insertions, 91 deletions
diff --git a/chromium/ui/compositor/BUILD.gn b/chromium/ui/compositor/BUILD.gn index 19ba19069b3..219d6a8f0a9 100644 --- a/chromium/ui/compositor/BUILD.gn +++ b/chromium/ui/compositor/BUILD.gn @@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/jumbo.gni") import("//build/config/ui.gni") import("//testing/test.gni") @@ -12,7 +11,7 @@ import("//testing/test.gni") # TODO(crbug.com/1018739): remove this when migration is done. set_sources_assignment_filter([]) -jumbo_component("compositor") { +component("compositor") { sources = [ "animation_metrics_recorder.cc", "animation_metrics_recorder.h", @@ -125,7 +124,7 @@ jumbo_component("compositor") { } } -jumbo_static_library("test_support") { +static_library("test_support") { testonly = true sources = [ "test/direct_layer_tree_frame_sink.cc", @@ -209,18 +208,34 @@ jumbo_static_library("test_support") { } if (use_ozone) { - sources += [ "test/test_compositor_host_ozone.cc" ] + sources += [ + "test/test_compositor_host_ozone.cc", + "test/test_compositor_host_ozone.h", + ] deps += [ "//ui/ozone", "//ui/platform_window", ] - } else if (use_x11) { - sources += [ "test/test_compositor_host_x11.cc" ] + } + + if (use_x11) { + sources += [ + "test/test_compositor_host_x11.cc", + "test/test_compositor_host_x11.h", + ] + } + + if (is_linux) { + sources += [ "test/test_compositor_host_linux.cc" ] } } test("compositor_unittests") { + if ((is_linux && !is_chromeos) || chromeos_is_browser_only) { + use_xvfb = true + } + sources = [ "animation_throughput_reporter_unittest.cc", "callback_layer_animation_observer_unittest.cc", @@ -258,7 +273,7 @@ test("compositor_unittests") { "//ui/resources", ] - if (is_linux) { + if (is_linux || is_chromeos) { deps += [ "//third_party/mesa_headers" ] } } diff --git a/chromium/ui/compositor/animation_metrics_reporter.h b/chromium/ui/compositor/animation_metrics_reporter.h index 1b12fb55acc..d06fe232e70 100644 --- a/chromium/ui/compositor/animation_metrics_reporter.h +++ b/chromium/ui/compositor/animation_metrics_reporter.h @@ -5,7 +5,6 @@ #ifndef UI_COMPOSITOR_ANIMATION_METRICS_REPORTER_H_ #define UI_COMPOSITOR_ANIMATION_METRICS_REPORTER_H_ -#include "base/metrics/histogram_macros.h" #include "ui/compositor/compositor_export.h" namespace ui { @@ -23,25 +22,6 @@ class COMPOSITOR_EXPORT AnimationMetricsReporter { virtual void Report(int value) = 0; }; -// A subclass of AnimationMetricsReporter that writes into a percentage -// histogram when Report() is called. -template <const char* histogram_name> -class COMPOSITOR_EXPORT HistogramPercentageMetricsReporter - : public AnimationMetricsReporter { - public: - HistogramPercentageMetricsReporter() = default; - HistogramPercentageMetricsReporter( - const HistogramPercentageMetricsReporter&) = delete; - HistogramPercentageMetricsReporter& operator=( - const HistogramPercentageMetricsReporter&) = delete; - ~HistogramPercentageMetricsReporter() override = default; - - // AnimationMetricsReporter: - void Report(int value) override { - UMA_HISTOGRAM_PERCENTAGE(histogram_name, value); - } -}; - } // namespace ui #endif // UI_COMPOSITOR_ANIMATION_METRICS_REPORTER_H_ diff --git a/chromium/ui/compositor/animation_throughput_reporter.cc b/chromium/ui/compositor/animation_throughput_reporter.cc index bcb963bb367..5704e26554d 100644 --- a/chromium/ui/compositor/animation_throughput_reporter.cc +++ b/chromium/ui/compositor/animation_throughput_reporter.cc @@ -17,6 +17,7 @@ #include "ui/compositor/compositor.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animation_delegate.h" +#include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" #include "ui/compositor/throughput_tracker.h" @@ -47,7 +48,7 @@ class AnimationThroughputReporter::AnimationTracker void OnAnimatorAttachedToTimeline() override { MaybeStartTracking(); } void OnAnimatorDetachedFromTimeline() override { // Gives up tracking when detached from the timeline. - should_start_tracking_ = false; + first_animation_group_id_.reset(); if (throughput_tracker_) throughput_tracker_.reset(); @@ -59,18 +60,32 @@ class AnimationThroughputReporter::AnimationTracker void OnLayerAnimationStarted(LayerAnimationSequence* sequence) override { CallbackLayerAnimationObserver::OnLayerAnimationStarted(sequence); - should_start_tracking_ = true; - MaybeStartTracking(); + if (!first_animation_group_id_.has_value()) { + first_animation_group_id_ = sequence->animation_group_id(); + MaybeStartTracking(); + } // Make sure SetActive() is called so that OnAnimationEnded callback will be // invoked when all attached layer animation sequences finish. if (!active()) SetActive(); } + void OnLayerAnimationAborted(LayerAnimationSequence* sequence) override { + // Check whether the aborted animation sequence is among the relevant ones + // (started while the tracker is alive). This is done by checking the + // animation_group_id() and assuming the id is monotonic increasing. + if (first_animation_group_id_.has_value() && + first_animation_group_id_.value() <= sequence->animation_group_id()) { + started_animations_aborted_ = true; + } + + // Note the following call could delete |this|. + CallbackLayerAnimationObserver::OnLayerAnimationAborted(sequence); + } void MaybeStartTracking() { // No tracking if no layer animation sequence is started. - if (!should_start_tracking_) + if (!first_animation_group_id_.has_value()) return; // No tracking if |animator_| is not attached to a timeline. Layer animation @@ -88,17 +103,16 @@ class AnimationThroughputReporter::AnimationTracker // Invoked when all animation sequences finish. bool OnAnimationEnded(const CallbackLayerAnimationObserver& self) { - // |tracking_started_| could reset when detached from animation timeline. - // E.g. underlying Layer is moved from one Compositor to another. No report - // for such case. + // |throughput_tracker| could reset when detached from animation timeline. if (throughput_tracker_) { - if (self.aborted_count()) + if (started_animations_aborted_) throughput_tracker_->Cancel(); else throughput_tracker_->Stop(); } - should_start_tracking_ = false; + first_animation_group_id_.reset(); + started_animations_aborted_ = false; return should_delete_; } @@ -109,8 +123,8 @@ class AnimationThroughputReporter::AnimationTracker base::Optional<ThroughputTracker> throughput_tracker_; - // Whether |throughput_tracker_| should be started. - bool should_start_tracking_ = false; + base::Optional<int> first_animation_group_id_; + bool started_animations_aborted_ = false; AnimationThroughputReporter::ReportCallback report_callback_; }; diff --git a/chromium/ui/compositor/animation_throughput_reporter_unittest.cc b/chromium/ui/compositor/animation_throughput_reporter_unittest.cc index c6a14ba2f45..446a57db6bf 100644 --- a/chromium/ui/compositor/animation_throughput_reporter_unittest.cc +++ b/chromium/ui/compositor/animation_throughput_reporter_unittest.cc @@ -268,4 +268,47 @@ TEST_F(AnimationThroughputReporterTest, EndDetachedNoReportNoLeak) { // AnimationTracker in |reporter| should not leak in asan. } +// Tests animation throughput are reported if there was a previous animation +// preempted under IMMEDIATELY_ANIMATE_TO_NEW_TARGET strategy. +TEST_F(AnimationThroughputReporterTest, ReportForAnimateToNewTarget) { + auto layer = std::make_unique<Layer>(); + layer->SetOpacity(0.f); + layer->SetBounds(gfx::Rect(0, 0, 1, 2)); + root_layer()->Add(layer.get()); + + LayerAnimator* animator = layer->GetAnimator(); + + // Schedule an animation that will be preempted. No report should happen. + { + AnimationThroughputReporter reporter( + animator, base::BindLambdaForTesting( + [&](cc::FrameSequenceMetrics::ThroughputData) { + ADD_FAILURE() << "No report for aborted animations."; + })); + + ScopedLayerAnimationSettings settings(animator); + settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50)); + layer->SetOpacity(0.5f); + layer->SetBounds(gfx::Rect(0, 0, 3, 4)); + } + + // Animate to new target. Report should happen. + base::RunLoop run_loop; + { + AnimationThroughputReporter reporter( + animator, base::BindLambdaForTesting( + [&](cc::FrameSequenceMetrics::ThroughputData) { + run_loop.Quit(); + })); + + ScopedLayerAnimationSettings settings(animator); + settings.SetPreemptionStrategy( + LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); + settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50)); + layer->SetOpacity(1.0f); + layer->SetBounds(gfx::Rect(0, 0, 5, 6)); + } + run_loop.Run(); +} + } // namespace ui diff --git a/chromium/ui/compositor/compositor.cc b/chromium/ui/compositor/compositor.cc index 65d2f3ec773..5b6f5f2f04e 100644 --- a/chromium/ui/compositor/compositor.cc +++ b/chromium/ui/compositor/compositor.cc @@ -172,7 +172,7 @@ Compositor::Compositor(const viz::FrameSinkId& frame_sink_id, settings.use_rgba_4444 = command_line->HasSwitch(switches::kUIEnableRGBA4444Textures); -#if defined(OS_MACOSX) +#if defined(OS_APPLE) // Using CoreAnimation to composite requires using GpuMemoryBuffers, which // require zero copy. settings.resource_settings.use_gpu_memory_buffer_resources = @@ -451,7 +451,8 @@ void Compositor::SetDisplayColorSpaces( return; display_color_spaces_ = display_color_spaces; - host_->SetRasterColorSpace(display_color_spaces_.GetRasterColorSpace()); + host_->SetDisplayColorSpaces(display_color_spaces_); + // Always force the ui::Compositor to re-draw all layers, because damage // tracking bugs result in black flashes. // https://crbug.com/804430 @@ -698,8 +699,7 @@ void Compositor::DidSubmitCompositorFrame() { } void Compositor::FrameIntervalUpdated(base::TimeDelta interval) { - refresh_rate_ = - base::Time::kMicrosecondsPerSecond / interval.InMicrosecondsF(); + refresh_rate_ = interval.ToHz(); } void Compositor::OnFirstSurfaceActivation( @@ -769,4 +769,10 @@ void Compositor::ReportThroughputForTracker( throughput_tracker_map_.erase(it); } +void Compositor::SetDelegatedInkPointRenderer( + mojo::PendingReceiver<viz::mojom::DelegatedInkPointRenderer> receiver) { + if (display_private_) + display_private_->SetDelegatedInkPointRenderer(std::move(receiver)); +} + } // namespace ui diff --git a/chromium/ui/compositor/compositor.h b/chromium/ui/compositor/compositor.h index 438dd212d88..13665946e08 100644 --- a/chromium/ui/compositor/compositor.h +++ b/chromium/ui/compositor/compositor.h @@ -72,6 +72,7 @@ namespace viz { namespace mojom { class DisplayPrivate; class ExternalBeginFrameController; +class DelegatedInkPointRenderer; } // namespace mojom class ContextProvider; class HostFrameSinkManager; @@ -404,6 +405,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient, return scroll_input_handler_.get(); } + virtual void SetDelegatedInkPointRenderer( + mojo::PendingReceiver<viz::mojom::DelegatedInkPointRenderer> receiver); + private: friend class base::RefCounted<Compositor>; @@ -416,6 +420,13 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient, ui::ContextFactory* context_factory_; + // |display_private_| can be null for: + // 1. Tests that don't set |display_private_|. + // 2. Intermittently on creation or if there is some kind of error (GPU crash, + // GL context loss, etc.) that triggers reinitializing message pipes to the + // GPU process RootCompositorFrameSinkImpl. + // Therefore, it should always be null checked for safety before use. + // // These pointers are owned by |context_factory_|, and must be reset before // calling RemoveCompositor(); viz::mojom::DisplayPrivate* display_private_ = nullptr; diff --git a/chromium/ui/compositor/compositor_observer.h b/chromium/ui/compositor/compositor_observer.h index 501aa3dbfbb..a5d845d5870 100644 --- a/chromium/ui/compositor/compositor_observer.h +++ b/chromium/ui/compositor/compositor_observer.h @@ -46,7 +46,7 @@ class COMPOSITOR_EXPORT CompositorObserver { // Called when a swap with new size is completed. virtual void OnCompositingCompleteSwapWithNewSize(ui::Compositor* compositor, const gfx::Size& size) {} -#endif // defined(OS_LINUX) +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) // Called at the top of the compositor's destructor, to give observers a // chance to remove themselves. diff --git a/chromium/ui/compositor/compositor_switches.cc b/chromium/ui/compositor/compositor_switches.cc index dfedaea2cf6..7cd81cfafc9 100644 --- a/chromium/ui/compositor/compositor_switches.cc +++ b/chromium/ui/compositor/compositor_switches.cc @@ -50,7 +50,7 @@ bool IsUIZeroCopyEnabled() { // Match the behavior of IsZeroCopyUploadEnabled() in content/browser/gpu. const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); -#if defined(OS_MACOSX) +#if defined(OS_APPLE) return !command_line.HasSwitch(switches::kUIDisableZeroCopy); #else return command_line.HasSwitch(switches::kUIEnableZeroCopy); diff --git a/chromium/ui/compositor/float_animation_curve_adapter.cc b/chromium/ui/compositor/float_animation_curve_adapter.cc index df1f96ee6bf..1ae6bd14c93 100644 --- a/chromium/ui/compositor/float_animation_curve_adapter.cc +++ b/chromium/ui/compositor/float_animation_curve_adapter.cc @@ -5,7 +5,6 @@ #include "ui/compositor/float_animation_curve_adapter.h" #include "base/memory/ptr_util.h" -#include "cc/base/time_util.h" namespace ui { @@ -34,10 +33,9 @@ float FloatAnimationCurveAdapter::GetValue(base::TimeDelta t) const { return target_value_; if (t <= base::TimeDelta()) return initial_value_; - double progress = cc::TimeUtil::Divide(t, duration_); + return gfx::Tween::FloatValueBetween( - gfx::Tween::CalculateValue(tween_type_, progress), - initial_value_, + gfx::Tween::CalculateValue(tween_type_, t / duration_), initial_value_, target_value_); } diff --git a/chromium/ui/compositor/layer.cc b/chromium/ui/compositor/layer.cc index 27efca014fd..12f75f828e6 100644 --- a/chromium/ui/compositor/layer.cc +++ b/chromium/ui/compositor/layer.cc @@ -5,6 +5,7 @@ #include "ui/compositor/layer.h" #include <algorithm> +#include <cmath> #include <memory> #include <utility> @@ -59,7 +60,7 @@ void CheckSnapped(float snapped_position) { // artifacts as well as large enough to not cause false crashes when an // uncommon device scale factor is applied. const float kEplison = 0.003f; - float diff = std::abs(snapped_position - gfx::ToRoundedInt(snapped_position)); + float diff = std::abs(snapped_position - std::round(snapped_position)); DCHECK_LT(diff, kEplison); } #endif diff --git a/chromium/ui/compositor/layer.h b/chromium/ui/compositor/layer.h index 8434ac53c33..b3f6b8bc74f 100644 --- a/chromium/ui/compositor/layer.h +++ b/chromium/ui/compositor/layer.h @@ -509,6 +509,10 @@ class COMPOSITOR_EXPORT Layer : public LayerAnimationDelegate, bool ContainsMirrorForTest(Layer* mirror) const; + void SetCompositorForTesting(Compositor* compositor) { + compositor_ = compositor; + } + private: friend class LayerOwner; class LayerMirror; diff --git a/chromium/ui/compositor/layer_animation_element.cc b/chromium/ui/compositor/layer_animation_element.cc index 9da426ae66a..2d60ac1dd44 100644 --- a/chromium/ui/compositor/layer_animation_element.cc +++ b/chromium/ui/compositor/layer_animation_element.cc @@ -628,7 +628,7 @@ bool LayerAnimationElement::Progress(base::TimeTicks now, base::TimeDelta elapsed = now - effective_start_time_; if ((duration_ > base::TimeDelta()) && (elapsed < duration_)) - t = elapsed.InMillisecondsF() / duration_.InMillisecondsF(); + t = elapsed / duration_; base::WeakPtr<LayerAnimationElement> alive(weak_ptr_factory_.GetWeakPtr()); need_draw = OnProgress(gfx::Tween::CalculateValue(tween_type_, t), delegate); if (!alive) diff --git a/chromium/ui/compositor/layer_animator_unittest.cc b/chromium/ui/compositor/layer_animator_unittest.cc index bbb9f4c5c37..1aa26315d36 100644 --- a/chromium/ui/compositor/layer_animator_unittest.cc +++ b/chromium/ui/compositor/layer_animator_unittest.cc @@ -10,6 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/numerics/safe_conversions.h" #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/test/scoped_mock_clock_override.h" @@ -1209,7 +1210,7 @@ TEST(LayerAnimatorTest, StartTogetherSetsLastStepTime) { // should be enormous. Arbitrarily choosing 1 minute as the threshold, // though a much smaller value would probably have sufficed. delta = base::TimeTicks::Now() - animator->last_step_time(); - EXPECT_GT(60.0, delta.InSecondsF()); + EXPECT_LT(delta, base::TimeDelta::FromMinutes(1)); } //------------------------------------------------------- @@ -3502,17 +3503,15 @@ TEST(LayerAnimatorTest, Layer root; compositor->SetRootLayer(&root); - constexpr base::TimeDelta kAnimationDuration = - base::TimeDelta::FromMilliseconds(50); + constexpr auto kAnimationDuration = base::TimeDelta::FromMilliseconds(50); // Draw enough frames so that missing the start frame number would cause the // reporter to always report 100% smoothness. 4 times of the expected // animation frames because somehow the refresh rate changes from 60fps to // 200fps when reporting. - const float frame_interval = - base::Time::kMillisecondsPerSecond / compositor->refresh_rate(); const int kStartFrameNumber = - static_cast<int>(kAnimationDuration.InMillisecondsF() / frame_interval) * + base::ClampFloor(kAnimationDuration.InSecondsF() * + compositor->refresh_rate()) * 4; while (compositor->activated_frame_count() < kStartFrameNumber) { compositor->ScheduleFullRedraw(); diff --git a/chromium/ui/compositor/layer_unittest.cc b/chromium/ui/compositor/layer_unittest.cc index 77945544e9f..57c280b75da 100644 --- a/chromium/ui/compositor/layer_unittest.cc +++ b/chromium/ui/compositor/layer_unittest.cc @@ -1709,7 +1709,7 @@ TEST_P(LayerWithRealCompositorTest, SetRootLayer) { // TODO(vollick): could be reorganized into compositor_unittest.cc // Flaky on Windows. See https://crbug.com/784563. // Flaky on Linux tsan. See https://crbug.com/834026. -#if defined(OS_WIN) || defined(OS_LINUX) +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) #define MAYBE_CompositorObservers DISABLED_CompositorObservers #else #define MAYBE_CompositorObservers CompositorObservers diff --git a/chromium/ui/compositor/test/test_compositor_host_ozone.cc b/chromium/ui/compositor/test/test_compositor_host_ozone.cc index d60cbe986af..bb170d382f3 100644 --- a/chromium/ui/compositor/test/test_compositor_host_ozone.cc +++ b/chromium/ui/compositor/test/test_compositor_host_ozone.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ui/compositor/test/test_compositor_host.h" +#include "ui/compositor/test/test_compositor_host_ozone.h" #include <memory> @@ -13,6 +13,7 @@ #include "base/memory/weak_ptr.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" +#include "build/build_config.h" #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "ui/compositor/compositor.h" #include "ui/gfx/geometry/rect.h" @@ -24,11 +25,10 @@ namespace ui { -namespace { - // Stub implementation of PlatformWindowDelegate that stores the // AcceleratedWidget. -class StubPlatformWindowDelegate : public PlatformWindowDelegate { +class TestCompositorHostOzone::StubPlatformWindowDelegate + : public PlatformWindowDelegate { public: StubPlatformWindowDelegate() {} ~StubPlatformWindowDelegate() override {} @@ -46,6 +46,7 @@ class StubPlatformWindowDelegate : public PlatformWindowDelegate { void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override { widget_ = widget; } + void OnWillDestroyAcceleratedWidget() override {} void OnAcceleratedWidgetDestroyed() override { widget_ = gfx::kNullAcceleratedWidget; } @@ -58,26 +59,6 @@ class StubPlatformWindowDelegate : public PlatformWindowDelegate { DISALLOW_COPY_AND_ASSIGN(StubPlatformWindowDelegate); }; -class TestCompositorHostOzone : public TestCompositorHost { - public: - TestCompositorHostOzone(const gfx::Rect& bounds, - ui::ContextFactory* context_factory); - ~TestCompositorHostOzone() override; - - private: - // Overridden from TestCompositorHost: - void Show() override; - ui::Compositor* GetCompositor() override; - - gfx::Rect bounds_; - ui::Compositor compositor_; - std::unique_ptr<PlatformWindow> window_; - StubPlatformWindowDelegate window_delegate_; - viz::ParentLocalSurfaceIdAllocator allocator_; - - DISALLOW_COPY_AND_ASSIGN(TestCompositorHostOzone); -}; - TestCompositorHostOzone::TestCompositorHostOzone( const gfx::Rect& bounds, ui::ContextFactory* context_factory) @@ -85,7 +66,8 @@ TestCompositorHostOzone::TestCompositorHostOzone( compositor_(context_factory->AllocateFrameSinkId(), context_factory, base::ThreadTaskRunnerHandle::Get(), - false /* enable_pixel_canvas */) {} + false /* enable_pixel_canvas */), + window_delegate_(std::make_unique<StubPlatformWindowDelegate>()) {} TestCompositorHostOzone::~TestCompositorHostOzone() { // |window_| should be destroyed earlier than |window_delegate_| as it refers @@ -98,12 +80,12 @@ void TestCompositorHostOzone::Show() { properties.bounds = bounds_; // Create a PlatformWindow to get the AcceleratedWidget backing it. window_ = ui::OzonePlatform::GetInstance()->CreatePlatformWindow( - &window_delegate_, std::move(properties)); + window_delegate_.get(), std::move(properties)); window_->Show(); - DCHECK_NE(window_delegate_.widget(), gfx::kNullAcceleratedWidget); + DCHECK_NE(window_delegate_->widget(), gfx::kNullAcceleratedWidget); allocator_.GenerateId(); - compositor_.SetAcceleratedWidget(window_delegate_.widget()); + compositor_.SetAcceleratedWidget(window_delegate_->widget()); compositor_.SetScaleAndSize(1.0f, bounds_.size(), allocator_.GetCurrentLocalSurfaceIdAllocation()); compositor_.SetVisible(true); @@ -113,13 +95,16 @@ ui::Compositor* TestCompositorHostOzone::GetCompositor() { return &compositor_; } -} // namespace - +// To avoid multiple definitions when use_x11 && use_ozone is true, disable this +// factory method for OS_LINUX as Linux has a factory method that decides what +// screen to use based on IsUsingOzonePlatform feature flag. +#if !defined(OS_LINUX) && !defined(OS_CHROMEOS) // static TestCompositorHost* TestCompositorHost::Create( const gfx::Rect& bounds, ui::ContextFactory* context_factory) { return new TestCompositorHostOzone(bounds, context_factory); } +#endif } // namespace ui diff --git a/chromium/ui/compositor/test/test_compositor_host_ozone.h b/chromium/ui/compositor/test/test_compositor_host_ozone.h new file mode 100644 index 00000000000..7b764f20382 --- /dev/null +++ b/chromium/ui/compositor/test/test_compositor_host_ozone.h @@ -0,0 +1,44 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_COMPOSITOR_TEST_TEST_COMPOSITOR_HOST_OZONE_H_ +#define UI_COMPOSITOR_TEST_TEST_COMPOSITOR_HOST_OZONE_H_ + +#include "ui/compositor/test/test_compositor_host.h" + +#include <memory> + +#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" +#include "ui/compositor/compositor.h" +#include "ui/gfx/geometry/rect.h" + +namespace ui { + +class PlatformWindow; + +class TestCompositorHostOzone : public TestCompositorHost { + public: + TestCompositorHostOzone(const gfx::Rect& bounds, + ui::ContextFactory* context_factory); + TestCompositorHostOzone(const TestCompositorHostOzone&) = delete; + TestCompositorHostOzone& operator=(const TestCompositorHostOzone&) = delete; + ~TestCompositorHostOzone() override; + + private: + class StubPlatformWindowDelegate; + + // Overridden from TestCompositorHost: + void Show() override; + ui::Compositor* GetCompositor() override; + + gfx::Rect bounds_; + ui::Compositor compositor_; + std::unique_ptr<PlatformWindow> window_; + std::unique_ptr<StubPlatformWindowDelegate> window_delegate_; + viz::ParentLocalSurfaceIdAllocator allocator_; +}; + +} // namespace ui + +#endif // UI_COMPOSITOR_TEST_TEST_COMPOSITOR_HOST_OZONE_H_ diff --git a/chromium/ui/compositor/transform_animation_curve_adapter.cc b/chromium/ui/compositor/transform_animation_curve_adapter.cc index 49350962a25..9a871abab33 100644 --- a/chromium/ui/compositor/transform_animation_curve_adapter.cc +++ b/chromium/ui/compositor/transform_animation_curve_adapter.cc @@ -5,7 +5,6 @@ #include "ui/compositor/transform_animation_curve_adapter.h" #include "base/memory/ptr_util.h" -#include "cc/base/time_util.h" namespace ui { @@ -56,12 +55,10 @@ cc::TransformOperations TransformAnimationCurveAdapter::GetValue( return target_wrapped_value_; if (t <= base::TimeDelta()) return initial_wrapped_value_; - double progress = cc::TimeUtil::Divide(t, duration_); gfx::DecomposedTransform to_return = gfx::BlendDecomposedTransforms( decomposed_target_value_, decomposed_initial_value_, - gfx::Tween::CalculateValue(tween_type_, progress)); - + gfx::Tween::CalculateValue(tween_type_, t / duration_)); return WrapTransform(gfx::ComposeTransform(to_return)); } |