Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 151093005: cc: Update Main RendererCapabilities on DeferredInitialize (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: with tests Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/trees/layer_tree_host_unittest.cc
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index eb81d5b8e8a200dfb9e353a878cca21e998877a2..68913b8973ccb2c3d293c062694a348b7b6fece4 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -3093,6 +3093,103 @@ class LayerTreeHostTestDeferredInitialize : public LayerTreeHostTest {
MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize);
+class LayerTreeHostTestAbortFrameOnStaleRendererCapabilities
+ : public LayerTreeHostTest {
+ public:
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+ settings->impl_side_painting = true;
+ }
+
+ virtual void SetupTree() OVERRIDE {
+ layer_ = FakePictureLayer::Create(&client_);
+ // Make sure commits are not aborted due to no update.
+ layer_->set_always_update_resources(true);
+ layer_tree_host()->SetRootLayer(layer_);
+ LayerTreeHostTest::SetupTree();
+ }
+
+ virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
+ OVERRIDE {
+ scoped_ptr<TestWebGraphicsContext3D> context3d(
danakj 2014/02/11 19:58:59 unused?
boliu 2014/02/11 21:44:07 Done.
+ TestWebGraphicsContext3D::Create());
+
+ return FakeOutputSurface::CreateDeferredGL(
+ scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice));
+ }
+
+ virtual void BeginTest() OVERRIDE {
+ aborted_frame_ = true;
+ main_frame_attempts_ = 0;
+ PostSetNeedsCommitToMainThread();
+ }
+
+ virtual void WillBeginMainFrame() OVERRIDE {
+ int frame_number = layer_tree_host()->source_frame_number();
+ EXPECT_EQ(0, frame_number); // Only one frame.
+ main_frame_attempts_++;
+ // Main frame should only be aborted once.
+ EXPECT_LE(main_frame_attempts_, 2);
+
+ if (main_frame_attempts_ == 1) {
+ // Capabilities updated once on first renderer init.
+ EXPECT_EQ(static_cast<size_t>(1),
danakj 2014/02/11 19:58:59 "1u" instead of static_cast<size_t>(1)
boliu 2014/02/11 21:44:07 Done.
+ layer_->renderer_capabilities_changed_count());
+ layer_->reset_renderer_capabilities_changed_count();
+
+ // Make sure first main frame attemp gets aborted due to stale renderer
danakj 2014/02/11 19:58:59 attempt
boliu 2014/02/11 21:44:07 Done.
+ // capabilities by synchronously updating renderer capabilities on impl
+ // thread.
+ CompletionEvent completion;
+ ImplThreadTaskRunner()->PostTask(
+ FROM_HERE,
+ base::Bind(&LayerTreeHostTestAbortFrameOnStaleRendererCapabilities::
+ UpdateRendererCapabilities,
+ base::Unretained(this),
+ &completion));
+ completion.Wait();
+ } else {
+ // Capabilities updated again before second attempt of first frame.
+ EXPECT_EQ(static_cast<size_t>(1),
danakj 2014/02/11 19:58:59 1u
boliu 2014/02/11 21:44:07 Done.
+ layer_->renderer_capabilities_changed_count());
+ layer_->reset_renderer_capabilities_changed_count();
+ }
+ }
+
+ void UpdateRendererCapabilities(CompletionEvent* completion) {
+ // Change renderer capabilities by switching renderers.
+ scoped_refptr<TestContextProvider> context_provider =
+ TestContextProvider::Create();
+ EXPECT_TRUE(
+ output_surface()->InitializeAndSetContext3d(context_provider, NULL));
+ completion->Signal();
+ }
+
+ virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
+ bool did_handle) OVERRIDE {
+ EXPECT_TRUE(did_handle);
+ aborted_frame_ = true;
danakj 2014/02/11 19:58:59 use an int instead so you can test the number of t
boliu 2014/02/11 21:44:07 Done.
+ }
+
+ virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
+ EndTest();
+ }
+
+ virtual void AfterTest() OVERRIDE {
+ // First main frame should have been attempted twice.
+ EXPECT_EQ(2, main_frame_attempts_);
+ // First attempted should have been aborted.
danakj 2014/02/11 19:58:59 attempt
boliu 2014/02/11 21:44:07 Done.
+ EXPECT_TRUE(aborted_frame_);
+ }
+
+ private:
+ FakeContentLayerClient client_;
+ scoped_refptr<FakePictureLayer> layer_;
+ int main_frame_attempts_;
+ bool aborted_frame_;
+};
+
+MULTI_THREAD_TEST_F(LayerTreeHostTestAbortFrameOnStaleRendererCapabilities);
+
// Test for UI Resource management.
class LayerTreeHostTestUIResource : public LayerTreeHostTest {
public:

Powered by Google App Engine
This is Rietveld 408576698