summaryrefslogtreecommitdiff
path: root/chromium/ui/compositor
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/compositor')
-rw-r--r--chromium/ui/compositor/BUILD.gn29
-rw-r--r--chromium/ui/compositor/animation_metrics_reporter.h20
-rw-r--r--chromium/ui/compositor/animation_throughput_reporter.cc36
-rw-r--r--chromium/ui/compositor/animation_throughput_reporter_unittest.cc43
-rw-r--r--chromium/ui/compositor/compositor.cc14
-rw-r--r--chromium/ui/compositor/compositor.h11
-rw-r--r--chromium/ui/compositor/compositor_observer.h2
-rw-r--r--chromium/ui/compositor/compositor_switches.cc2
-rw-r--r--chromium/ui/compositor/float_animation_curve_adapter.cc6
-rw-r--r--chromium/ui/compositor/layer.cc3
-rw-r--r--chromium/ui/compositor/layer.h4
-rw-r--r--chromium/ui/compositor/layer_animation_element.cc2
-rw-r--r--chromium/ui/compositor/layer_animator_unittest.cc11
-rw-r--r--chromium/ui/compositor/layer_unittest.cc2
-rw-r--r--chromium/ui/compositor/test/test_compositor_host_ozone.cc45
-rw-r--r--chromium/ui/compositor/test/test_compositor_host_ozone.h44
-rw-r--r--chromium/ui/compositor/transform_animation_curve_adapter.cc5
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));
}