summaryrefslogtreecommitdiffstats
path: root/ui/compositor
diff options
context:
space:
mode:
authorisherman <isherman@chromium.org>2014-12-05 17:01:33 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-06 01:02:14 +0000
commit4f0404e167031301c3f877e8000f5423b9adb9b7 (patch)
tree1625b4a43dc41cd985d7264ac232a552af91e491 /ui/compositor
parent8e72e1d6c13fa6a4cf2859ac6e209be4546bb50d (diff)
downloadchromium_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.cc118
-rw-r--r--ui/compositor/compositor.h22
-rw-r--r--ui/compositor/layer_unittest.cc30
-rw-r--r--ui/compositor/test/context_factories_for_test.cc3
-rw-r--r--ui/compositor/test/draw_waiter_for_test.cc22
-rw-r--r--ui/compositor/test/draw_waiter_for_test.h15
-rw-r--r--ui/compositor/test/in_process_context_factory.cc10
-rw-r--r--ui/compositor/test/in_process_context_factory.h4
-rw-r--r--ui/compositor/test/test_compositor_host_mac.mm2
-rw-r--r--ui/compositor/test/test_compositor_host_ozone.cc7
-rw-r--r--ui/compositor/test/test_compositor_host_win.cc2
-rw-r--r--ui/compositor/test/test_compositor_host_x11.cc7
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,