diff options
author | isherman <isherman@chromium.org> | 2014-12-05 17:01:33 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-06 01:02:14 +0000 |
commit | 4f0404e167031301c3f877e8000f5423b9adb9b7 (patch) | |
tree | 1625b4a43dc41cd985d7264ac232a552af91e491 /ui/compositor | |
parent | 8e72e1d6c13fa6a4cf2859ac6e209be4546bb50d (diff) | |
download | chromium_src-4f0404e167031301c3f877e8000f5423b9adb9b7.zip chromium_src-4f0404e167031301c3f877e8000f5423b9adb9b7.tar.gz chromium_src-4f0404e167031301c3f877e8000f5423b9adb9b7.tar.bz2 |
Revert of Make ui::Compositor use ui::Scheduler (patchset #13 id:360001 of https://codereview.chromium.org/638653003/)
Reason for revert:
This appears to be causing crashes on the Windows perf bots. See the linked bug for a stack trace.
BUG=439649
Original issue's description:
> Make ui::Compositor use ui::Scheduler
>
> Taken from enne's CL 535733002 and rebased. It has been taken out of CL 134623005.
>
> BUG=329552
>
> Committed: https://crrev.com/36b7fc7f8b05ea627873e58a162c1c26784e472d
> Cr-Commit-Position: refs/heads/master@{#298779}
>
> Committed: https://crrev.com/b821b71ff0166e250ae4b30b56c1b7b6d3bd5db6
> Cr-Commit-Position: refs/heads/master@{#306954}
TBR=ben@chromium.org,danakj@chromium.org,piman@chromium.org,sky@chromium.org,weiliangc@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=329552
Review URL: https://codereview.chromium.org/784653002
Cr-Commit-Position: refs/heads/master@{#307132}
Diffstat (limited to 'ui/compositor')
-rw-r--r-- | ui/compositor/compositor.cc | 118 | ||||
-rw-r--r-- | ui/compositor/compositor.h | 22 | ||||
-rw-r--r-- | ui/compositor/layer_unittest.cc | 30 | ||||
-rw-r--r-- | ui/compositor/test/context_factories_for_test.cc | 3 | ||||
-rw-r--r-- | ui/compositor/test/draw_waiter_for_test.cc | 22 | ||||
-rw-r--r-- | ui/compositor/test/draw_waiter_for_test.h | 15 | ||||
-rw-r--r-- | ui/compositor/test/in_process_context_factory.cc | 10 | ||||
-rw-r--r-- | ui/compositor/test/in_process_context_factory.h | 4 | ||||
-rw-r--r-- | ui/compositor/test/test_compositor_host_mac.mm | 2 | ||||
-rw-r--r-- | ui/compositor/test/test_compositor_host_ozone.cc | 7 | ||||
-rw-r--r-- | ui/compositor/test/test_compositor_host_win.cc | 2 | ||||
-rw-r--r-- | ui/compositor/test/test_compositor_host_x11.cc | 7 |
12 files changed, 160 insertions, 82 deletions
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index 0fae193..f676322 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc @@ -75,8 +75,14 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, task_runner_(task_runner), vsync_manager_(new CompositorVSyncManager()), device_scale_factor_(0.0f), + last_started_frame_(0), + last_ended_frame_(0), disable_schedule_composite_(false), compositor_lock_(NULL), + defer_draw_scheduling_(false), + waiting_on_compositing_end_(false), + draw_on_compositing_end_(false), + swap_state_(SWAP_NONE), layer_animator_collection_(this), weak_ptr_factory_(this) { root_web_layer_ = cc::Layer::Create(); @@ -102,8 +108,7 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, settings.per_tile_painting_enabled = true; #endif #if defined(OS_WIN) - settings.disable_hi_res_timer_tasks_on_battery = - !context_factory_->DoesCreateTestContexts(); + settings.disable_hi_res_timer_tasks_on_battery = true; settings.renderer_settings.finish_rendering_on_resize = true; #endif @@ -134,6 +139,7 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, settings.impl_side_painting = IsUIImplSidePaintingEnabled(); settings.use_zero_copy = IsUIZeroCopyEnabled(); + settings.single_thread_proxy_scheduler = false; base::TimeTicks before_create = base::TimeTicks::Now(); if (compositor_thread_loop_.get()) { @@ -184,7 +190,14 @@ void Compositor::SetOutputSurface( } void Compositor::ScheduleDraw() { - host_->SetNeedsCommit(); + if (compositor_thread_loop_.get()) { + host_->SetNeedsCommit(); + } else if (!defer_draw_scheduling_) { + defer_draw_scheduling_ = true; + task_runner_->PostTask( + FROM_HERE, + base::Bind(&Compositor::Draw, weak_ptr_factory_.GetWeakPtr())); + } } void Compositor::SetRootLayer(Layer* root_layer) { @@ -205,19 +218,43 @@ void Compositor::SetHostHasTransparentBackground( host_->set_has_transparent_background(host_has_transparent_background); } +void Compositor::Draw() { + DCHECK(!compositor_thread_loop_.get()); + + defer_draw_scheduling_ = false; + if (waiting_on_compositing_end_) { + draw_on_compositing_end_ = true; + return; + } + if (!root_layer_) + return; + + TRACE_EVENT_ASYNC_BEGIN0("ui", "Compositor::Draw", last_started_frame_ + 1); + + DCHECK_NE(swap_state_, SWAP_POSTED); + swap_state_ = SWAP_NONE; + + waiting_on_compositing_end_ = true; + last_started_frame_++; + if (!IsLocked()) { + // TODO(nduca): Temporary while compositor calls + // compositeImmediately() directly. + cc::BeginFrameArgs args = cc::BeginFrameArgs::Create( + BEGINFRAME_FROM_HERE, gfx::FrameTime::Now(), base::TimeTicks(), + cc::BeginFrameArgs::DefaultInterval(), cc::BeginFrameArgs::SYNCHRONOUS); + BeginMainFrame(args); + host_->Composite(args.frame_time); + } + if (swap_state_ == SWAP_NONE) + NotifyEnd(); +} + void Compositor::ScheduleFullRedraw() { - // TODO(enne): Some callers (mac) call this function expecting that it - // will also commit. This should probably just redraw the screen - // from damage and not commit. ScheduleDraw/ScheduleRedraw need - // better names. host_->SetNeedsRedraw(); - host_->SetNeedsCommit(); } void Compositor::ScheduleRedrawRect(const gfx::Rect& damage_rect) { - // TODO(enne): Make this not commit. See ScheduleFullRedraw. host_->SetNeedsRedrawRect(damage_rect); - host_->SetNeedsCommit(); } void Compositor::DisableSwapUntilResize() { @@ -332,28 +369,45 @@ void Compositor::DidCommit() { } void Compositor::DidCommitAndDrawFrame() { + base::TimeTicks start_time = gfx::FrameTime::Now(); + FOR_EACH_OBSERVER(CompositorObserver, + observer_list_, + OnCompositingStarted(this, start_time)); } void Compositor::DidCompleteSwapBuffers() { - // DidPostSwapBuffers is a SingleThreadProxy-only feature. Synthetically - // generate OnCompositingStarted messages for the threaded case so that - // OnCompositingStarted/OnCompositingEnded messages match. if (compositor_thread_loop_.get()) { - base::TimeTicks start_time = gfx::FrameTime::Now(); - FOR_EACH_OBSERVER(CompositorObserver, observer_list_, - OnCompositingStarted(this, start_time)); + NotifyEnd(); + } else { + DCHECK_EQ(swap_state_, SWAP_POSTED); + NotifyEnd(); + swap_state_ = SWAP_COMPLETED; } - FOR_EACH_OBSERVER(CompositorObserver, observer_list_, - OnCompositingEnded(this)); +} + +void Compositor::ScheduleComposite() { + if (!disable_schedule_composite_) + ScheduleDraw(); +} + +void Compositor::ScheduleAnimation() { + ScheduleComposite(); } void Compositor::DidPostSwapBuffers() { - base::TimeTicks start_time = gfx::FrameTime::Now(); - FOR_EACH_OBSERVER(CompositorObserver, observer_list_, - OnCompositingStarted(this, start_time)); + DCHECK(!compositor_thread_loop_.get()); + DCHECK_EQ(swap_state_, SWAP_NONE); + swap_state_ = SWAP_POSTED; } void Compositor::DidAbortSwapBuffers() { + if (!compositor_thread_loop_.get()) { + if (swap_state_ == SWAP_POSTED) { + NotifyEnd(); + swap_state_ = SWAP_COMPLETED; + } + } + FOR_EACH_OBSERVER(CompositorObserver, observer_list_, OnCompositingAborted(this)); @@ -375,7 +429,8 @@ const cc::RendererSettings& Compositor::GetRendererSettings() const { scoped_refptr<CompositorLock> Compositor::GetCompositorLock() { if (!compositor_lock_) { compositor_lock_ = new CompositorLock(this); - host_->SetDeferCommits(true); + if (compositor_thread_loop_.get()) + host_->SetDeferCommits(true); FOR_EACH_OBSERVER(CompositorObserver, observer_list_, OnCompositingLockStateChanged(this)); @@ -386,7 +441,8 @@ scoped_refptr<CompositorLock> Compositor::GetCompositorLock() { void Compositor::UnlockCompositor() { DCHECK(compositor_lock_); compositor_lock_ = NULL; - host_->SetDeferCommits(false); + if (compositor_thread_loop_.get()) + host_->SetDeferCommits(false); FOR_EACH_OBSERVER(CompositorObserver, observer_list_, OnCompositingLockStateChanged(this)); @@ -397,4 +453,20 @@ void Compositor::CancelCompositorLock() { compositor_lock_->CancelLock(); } +void Compositor::NotifyEnd() { + last_ended_frame_++; + TRACE_EVENT_ASYNC_END0("ui", "Compositor::Draw", last_ended_frame_); + waiting_on_compositing_end_ = false; + if (draw_on_compositing_end_) { + draw_on_compositing_end_ = false; + + // Call ScheduleDraw() instead of Draw() in order to allow other + // CompositorObservers to be notified before starting another + // draw cycle. + ScheduleDraw(); + } + FOR_EACH_OBSERVER( + CompositorObserver, observer_list_, OnCompositingEnded(this)); +} + } // namespace ui diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h index bf61d297..57e4a8e 100644 --- a/ui/compositor/compositor.h +++ b/ui/compositor/compositor.h @@ -25,6 +25,8 @@ #include "ui/gfx/size.h" #include "ui/gfx/vector2d.h" +class SkBitmap; + namespace base { class MessageLoopProxy; class RunLoop; @@ -173,6 +175,9 @@ class COMPOSITOR_EXPORT Compositor // compositing layers on. float device_scale_factor() const { return device_scale_factor_; } + // Draws the scene created by the layer tree and any visual effects. + void Draw(); + // Where possible, draws are scissored to a damage region calculated from // changes to layer properties. This bypasses that and indicates that // the whole frame needs to be drawn. @@ -259,9 +264,14 @@ class COMPOSITOR_EXPORT Compositor void DidCompleteSwapBuffers() override; // cc::LayerTreeHostSingleThreadClient implementation. + void ScheduleComposite() override; + void ScheduleAnimation() override; void DidPostSwapBuffers() override; void DidAbortSwapBuffers() override; + int last_started_frame() { return last_started_frame_; } + int last_ended_frame() { return last_ended_frame_; } + bool IsLocked() { return compositor_lock_ != NULL; } const cc::LayerTreeDebugState& GetLayerTreeDebugState() const; @@ -286,6 +296,9 @@ class COMPOSITOR_EXPORT Compositor // Called to release any pending CompositorLock void CancelCompositorLock(); + // Notifies the compositor that compositing is complete. + void NotifyEnd(); + gfx::Size size_; ui::ContextFactory* context_factory_; @@ -317,6 +330,15 @@ class COMPOSITOR_EXPORT Compositor CompositorLock* compositor_lock_; + // Prevent more than one draw from being scheduled. + bool defer_draw_scheduling_; + + // Used to prevent Draw()s while a composite is in progress. + bool waiting_on_compositing_end_; + bool draw_on_compositing_end_; + enum SwapState { SWAP_NONE, SWAP_POSTED, SWAP_COMPLETED }; + SwapState swap_state_; + LayerAnimatorCollection layer_animator_collection_; base::WeakPtrFactory<Compositor> weak_ptr_factory_; diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc index 3fe11c0..57e1e02 100644 --- a/ui/compositor/layer_unittest.cc +++ b/ui/compositor/layer_unittest.cc @@ -125,7 +125,7 @@ class LayerWithRealCompositorTest : public testing::Test { void DrawTree(Layer* root) { GetCompositor()->SetRootLayer(root); GetCompositor()->ScheduleDraw(); - WaitForSwap(); + WaitForDraw(); } void ReadPixels(SkBitmap* bitmap) { @@ -145,7 +145,7 @@ class LayerWithRealCompositorTest : public testing::Test { // be in the middle of a draw right now, and the commit with the // copy output request may not be done on the first draw. for (int i = 0; i < 2; i++) { - GetCompositor()->ScheduleFullRedraw(); + GetCompositor()->ScheduleDraw(); WaitForDraw(); } @@ -155,13 +155,7 @@ class LayerWithRealCompositorTest : public testing::Test { *bitmap = holder->result(); } - void WaitForDraw() { - ui::DrawWaiterForTest::WaitForCompositingStarted(GetCompositor()); - } - - void WaitForSwap() { - DrawWaiterForTest::WaitForCompositingEnded(GetCompositor()); - } + void WaitForDraw() { ui::DrawWaiterForTest::Wait(GetCompositor()); } void WaitForCommit() { ui::DrawWaiterForTest::WaitForCommit(GetCompositor()); @@ -446,9 +440,7 @@ class LayerWithDelegateTest : public testing::Test { WaitForDraw(); } - void WaitForDraw() { - DrawWaiterForTest::WaitForCompositingStarted(compositor()); - } + void WaitForDraw() { DrawWaiterForTest::Wait(compositor()); } void WaitForCommit() { DrawWaiterForTest::WaitForCommit(compositor()); @@ -1024,25 +1016,25 @@ TEST_F(LayerWithRealCompositorTest, CompositorObservers) { // Moving, but not resizing, a layer should alert the observers. observer.Reset(); l2->SetBounds(gfx::Rect(0, 0, 350, 350)); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); // So should resizing a layer. observer.Reset(); l2->SetBounds(gfx::Rect(0, 0, 400, 400)); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); // Opacity changes should alert the observers. observer.Reset(); l2->SetOpacity(0.5f); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); // So should setting the opacity back. observer.Reset(); l2->SetOpacity(1.0f); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); // Setting the transform of a layer should alert the observers. @@ -1052,7 +1044,7 @@ TEST_F(LayerWithRealCompositorTest, CompositorObservers) { transform.Rotate(90.0); transform.Translate(-200.0, -200.0); l2->SetTransform(transform); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); // A change resulting in an aborted swap buffer should alert the observer @@ -1060,7 +1052,7 @@ TEST_F(LayerWithRealCompositorTest, CompositorObservers) { observer.Reset(); l2->SetOpacity(0.1f); GetCompositor()->DidAbortSwapBuffers(); - WaitForSwap(); + WaitForDraw(); EXPECT_TRUE(observer.notified()); EXPECT_TRUE(observer.aborted()); @@ -1069,7 +1061,7 @@ TEST_F(LayerWithRealCompositorTest, CompositorObservers) { // Opacity changes should no longer alert the removed observer. observer.Reset(); l2->SetOpacity(0.5f); - WaitForSwap(); + WaitForDraw(); EXPECT_FALSE(observer.notified()); } diff --git a/ui/compositor/test/context_factories_for_test.cc b/ui/compositor/test/context_factories_for_test.cc index 08fd96a..f3eeeb3 100644 --- a/ui/compositor/test/context_factories_for_test.cc +++ b/ui/compositor/test/context_factories_for_test.cc @@ -29,8 +29,7 @@ ui::ContextFactory* InitializeContextFactoryForTests(bool enable_pixel_output) { enable_pixel_output = true; if (enable_pixel_output) g_disable_null_draw = new gfx::DisableNullDrawGLBindings; - bool context_factory_for_test = true; - g_implicit_factory = new InProcessContextFactory(context_factory_for_test); + g_implicit_factory = new InProcessContextFactory(); return g_implicit_factory; } diff --git a/ui/compositor/test/draw_waiter_for_test.cc b/ui/compositor/test/draw_waiter_for_test.cc index f256ecc..7687d66 100644 --- a/ui/compositor/test/draw_waiter_for_test.cc +++ b/ui/compositor/test/draw_waiter_for_test.cc @@ -9,24 +9,20 @@ namespace ui { // static -void DrawWaiterForTest::WaitForCompositingStarted(Compositor* compositor) { - DrawWaiterForTest waiter(WAIT_FOR_COMPOSITING_STARTED); - waiter.WaitImpl(compositor); -} - -void DrawWaiterForTest::WaitForCompositingEnded(Compositor* compositor) { - DrawWaiterForTest waiter(WAIT_FOR_COMPOSITING_ENDED); +void DrawWaiterForTest::Wait(Compositor* compositor) { + DrawWaiterForTest waiter; + waiter.wait_for_commit_ = false; waiter.WaitImpl(compositor); } // static void DrawWaiterForTest::WaitForCommit(Compositor* compositor) { - DrawWaiterForTest waiter(WAIT_FOR_COMMIT); + DrawWaiterForTest waiter; + waiter.wait_for_commit_ = true; waiter.WaitImpl(compositor); } -DrawWaiterForTest::DrawWaiterForTest(WaitEvent wait_event) - : wait_event_(wait_event) { +DrawWaiterForTest::DrawWaiterForTest() { } DrawWaiterForTest::~DrawWaiterForTest() {} @@ -39,18 +35,16 @@ void DrawWaiterForTest::WaitImpl(Compositor* compositor) { } void DrawWaiterForTest::OnCompositingDidCommit(Compositor* compositor) { - if (wait_event_ == WAIT_FOR_COMMIT) + if (wait_for_commit_) wait_run_loop_->Quit(); } void DrawWaiterForTest::OnCompositingStarted(Compositor* compositor, base::TimeTicks start_time) { - if (wait_event_ == WAIT_FOR_COMPOSITING_STARTED) - wait_run_loop_->Quit(); } void DrawWaiterForTest::OnCompositingEnded(Compositor* compositor) { - if (wait_event_ == WAIT_FOR_COMPOSITING_ENDED) + if (!wait_for_commit_) wait_run_loop_->Quit(); } diff --git a/ui/compositor/test/draw_waiter_for_test.h b/ui/compositor/test/draw_waiter_for_test.h index adae917..55ca2ff 100644 --- a/ui/compositor/test/draw_waiter_for_test.h +++ b/ui/compositor/test/draw_waiter_for_test.h @@ -20,22 +20,13 @@ class DrawWaiterForTest : public CompositorObserver { // Waits for a draw to be issued by the compositor. If the test times out // here, there may be a logic error in the compositor code causing it // not to draw. - static void WaitForCompositingStarted(Compositor* compositor); - - // Waits for a swap to be completed from the compositor. - static void WaitForCompositingEnded(Compositor* compositor); + static void Wait(Compositor* compositor); // Waits for a commit instead of a draw. static void WaitForCommit(Compositor* compositor); private: - enum WaitEvent { - WAIT_FOR_COMMIT, - WAIT_FOR_COMPOSITING_STARTED, - WAIT_FOR_COMPOSITING_ENDED, - }; - - DrawWaiterForTest(WaitEvent wait_event); + DrawWaiterForTest(); ~DrawWaiterForTest() override; void WaitImpl(Compositor* compositor); @@ -50,7 +41,7 @@ class DrawWaiterForTest : public CompositorObserver { scoped_ptr<base::RunLoop> wait_run_loop_; - WaitEvent wait_event_; + bool wait_for_commit_; DISALLOW_COPY_AND_ASSIGN(DrawWaiterForTest); }; diff --git a/ui/compositor/test/in_process_context_factory.cc b/ui/compositor/test/in_process_context_factory.cc index f51d6cc..961f9b1 100644 --- a/ui/compositor/test/in_process_context_factory.cc +++ b/ui/compositor/test/in_process_context_factory.cc @@ -63,10 +63,8 @@ class DirectOutputSurface : public cc::OutputSurface { } // namespace -InProcessContextFactory::InProcessContextFactory(bool context_factory_for_test) - : next_surface_id_namespace_(1u), - use_test_surface_(true), - context_factory_for_test_(context_factory_for_test) { +InProcessContextFactory::InProcessContextFactory() + : next_surface_id_namespace_(1u), use_test_surface_(true) { DCHECK_NE(gfx::GetGLImplementation(), gfx::kGLImplementationNone) << "If running tests, ensure that main() is calling " << "gfx::GLSurface::InitializeOneOffForTests()"; @@ -144,9 +142,7 @@ InProcessContextFactory::SharedMainThreadContextProvider() { void InProcessContextFactory::RemoveCompositor(Compositor* compositor) {} -bool InProcessContextFactory::DoesCreateTestContexts() { - return context_factory_for_test_; -} +bool InProcessContextFactory::DoesCreateTestContexts() { return false; } cc::SharedBitmapManager* InProcessContextFactory::GetSharedBitmapManager() { return &shared_bitmap_manager_; diff --git a/ui/compositor/test/in_process_context_factory.h b/ui/compositor/test/in_process_context_factory.h index 90ae49f..6fd4eaa 100644 --- a/ui/compositor/test/in_process_context_factory.h +++ b/ui/compositor/test/in_process_context_factory.h @@ -23,7 +23,7 @@ namespace ui { class InProcessContextFactory : public ContextFactory { public: - explicit InProcessContextFactory(bool context_factory_for_test); + InProcessContextFactory(); ~InProcessContextFactory() override; // If true (the default) an OutputSurface is created that does not display @@ -59,8 +59,6 @@ class InProcessContextFactory : public ContextFactory { uint32_t next_surface_id_namespace_; bool use_test_surface_; - const bool context_factory_for_test_; - DISALLOW_COPY_AND_ASSIGN(InProcessContextFactory); }; diff --git a/ui/compositor/test/test_compositor_host_mac.mm b/ui/compositor/test/test_compositor_host_mac.mm index 06fb4ca..b262a21 100644 --- a/ui/compositor/test/test_compositor_host_mac.mm +++ b/ui/compositor/test/test_compositor_host_mac.mm @@ -40,7 +40,7 @@ - (void)drawRect:(NSRect)rect { DCHECK(compositor_) << "Drawing with no compositor set."; - compositor_->ScheduleFullRedraw(); + compositor_->Draw(); } @end diff --git a/ui/compositor/test/test_compositor_host_ozone.cc b/ui/compositor/test/test_compositor_host_ozone.cc index 0d3861e..4871564 100644 --- a/ui/compositor/test/test_compositor_host_ozone.cc +++ b/ui/compositor/test/test_compositor_host_ozone.cc @@ -27,6 +27,8 @@ class TestCompositorHostOzone : public TestCompositorHost { virtual void Show() override; virtual ui::Compositor* GetCompositor() override; + void Draw(); + gfx::Rect bounds_; ui::ContextFactory* context_factory_; @@ -62,6 +64,11 @@ ui::Compositor* TestCompositorHostOzone::GetCompositor() { return compositor_.get(); } +void TestCompositorHostOzone::Draw() { + if (compositor_.get()) + compositor_->Draw(); +} + // static TestCompositorHost* TestCompositorHost::Create( const gfx::Rect& bounds, diff --git a/ui/compositor/test/test_compositor_host_win.cc b/ui/compositor/test/test_compositor_host_win.cc index e89d092..99a5a85 100644 --- a/ui/compositor/test/test_compositor_host_win.cc +++ b/ui/compositor/test/test_compositor_host_win.cc @@ -42,7 +42,7 @@ class TestCompositorHostWin : public TestCompositorHost, CR_END_MSG_MAP() void OnPaint(HDC dc) { - compositor_->ScheduleFullRedraw(); + compositor_->Draw(); ValidateRect(hwnd(), NULL); } diff --git a/ui/compositor/test/test_compositor_host_x11.cc b/ui/compositor/test/test_compositor_host_x11.cc index 2dad2fc..56ff793 100644 --- a/ui/compositor/test/test_compositor_host_x11.cc +++ b/ui/compositor/test/test_compositor_host_x11.cc @@ -30,6 +30,8 @@ class TestCompositorHostX11 : public TestCompositorHost { void Show() override; ui::Compositor* GetCompositor() override; + void Draw(); + gfx::Rect bounds_; ui::ContextFactory* context_factory_; @@ -83,6 +85,11 @@ ui::Compositor* TestCompositorHostX11::GetCompositor() { return compositor_.get(); } +void TestCompositorHostX11::Draw() { + if (compositor_.get()) + compositor_->Draw(); +} + // static TestCompositorHost* TestCompositorHost::Create( const gfx::Rect& bounds, |