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

Side by Side Diff: cc/trees/layer_tree_host_unittest_context.cc

Issue 246753008: cc: Unify use of DidSwapBuffers() and did_request_swap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Introduce HasSentDrawRequestThisFrame() Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "cc/layers/content_layer.h" 8 #include "cc/layers/content_layer.h"
9 #include "cc/layers/delegated_frame_provider.h" 9 #include "cc/layers/delegated_frame_provider.h"
10 #include "cc/layers/delegated_frame_resource_collection.h" 10 #include "cc/layers/delegated_frame_resource_collection.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 context3d_->set_have_extension_io_surface(true); 89 context3d_->set_have_extension_io_surface(true);
90 context3d_->set_have_extension_egl_image(true); 90 context3d_->set_have_extension_egl_image(true);
91 } 91 }
92 92
93 if (delegating_renderer()) 93 if (delegating_renderer())
94 return FakeOutputSurface::CreateDelegating3d(context3d.Pass()); 94 return FakeOutputSurface::CreateDelegating3d(context3d.Pass());
95 else 95 else
96 return FakeOutputSurface::Create3d(context3d.Pass()); 96 return FakeOutputSurface::Create3d(context3d.Pass());
97 } 97 }
98 98
99 virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread( 99 virtual DrawResult PrepareToDrawOnThread(
100 LayerTreeHostImpl* host_impl, 100 LayerTreeHostImpl* host_impl,
101 LayerTreeHostImpl::FrameData* frame, 101 LayerTreeHostImpl::FrameData* frame,
102 DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE { 102 DrawResult draw_result) OVERRIDE {
103 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, draw_result); 103 EXPECT_EQ(DRAW_SUCCESS, draw_result);
104 if (!times_to_lose_during_draw_) 104 if (!times_to_lose_during_draw_)
105 return draw_result; 105 return draw_result;
106 106
107 --times_to_lose_during_draw_; 107 --times_to_lose_during_draw_;
108 LoseContext(); 108 LoseContext();
109 109
110 times_to_fail_create_ = times_to_fail_recreate_; 110 times_to_fail_create_ = times_to_fail_recreate_;
111 times_to_fail_recreate_ = 0; 111 times_to_fail_recreate_ = 0;
112 112
113 return draw_result; 113 return draw_result;
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 847
848 if (host_impl->active_tree()->source_frame_number() == 3) { 848 if (host_impl->active_tree()->source_frame_number() == 3) {
849 // On the third commit we're recovering from context loss. Hardware 849 // On the third commit we're recovering from context loss. Hardware
850 // video frames should not be reused by the VideoFrameProvider, but 850 // video frames should not be reused by the VideoFrameProvider, but
851 // software frames can be. 851 // software frames can be.
852 hw_frame_provider_.set_frame(NULL); 852 hw_frame_provider_.set_frame(NULL);
853 scaled_hw_frame_provider_.set_frame(NULL); 853 scaled_hw_frame_provider_.set_frame(NULL);
854 } 854 }
855 } 855 }
856 856
857 virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread( 857 virtual DrawResult PrepareToDrawOnThread(
858 LayerTreeHostImpl* host_impl, 858 LayerTreeHostImpl* host_impl,
859 LayerTreeHostImpl::FrameData* frame, 859 LayerTreeHostImpl::FrameData* frame,
860 DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE { 860 DrawResult draw_result) OVERRIDE {
861 if (host_impl->active_tree()->source_frame_number() == 2) { 861 if (host_impl->active_tree()->source_frame_number() == 2) {
862 // Lose the context during draw on the second commit. This will cause 862 // Lose the context during draw on the second commit. This will cause
863 // a third commit to recover. 863 // a third commit to recover.
864 context3d_->set_times_bind_texture_succeeds(0); 864 context3d_->set_times_bind_texture_succeeds(0);
865 } 865 }
866 return draw_result; 866 return draw_result;
867 } 867 }
868 868
869 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback) 869 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface(bool fallback)
870 OVERRIDE { 870 OVERRIDE {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 } 941 }
942 942
943 virtual void DidCommitAndDrawFrame() OVERRIDE { EndTest(); } 943 virtual void DidCommitAndDrawFrame() OVERRIDE { EndTest(); }
944 944
945 virtual void AfterTest() OVERRIDE { 945 virtual void AfterTest() OVERRIDE {
946 // Should not try to create output surface again after successfully 946 // Should not try to create output surface again after successfully
947 // created by CompositeAndReadback. 947 // created by CompositeAndReadback.
948 EXPECT_EQ(1, times_output_surface_created_); 948 EXPECT_EQ(1, times_output_surface_created_);
949 } 949 }
950 950
951 virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread( 951 virtual DrawResult PrepareToDrawOnThread(
952 LayerTreeHostImpl* host_impl, 952 LayerTreeHostImpl* host_impl,
953 LayerTreeHostImpl::FrameData* frame_data, 953 LayerTreeHostImpl::FrameData* frame_data,
954 DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE { 954 DrawResult draw_result) OVERRIDE {
955 EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0); 955 EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0);
956 EXPECT_LE(host_impl->active_tree()->source_frame_number(), 1); 956 EXPECT_LE(host_impl->active_tree()->source_frame_number(), 1);
957 return draw_result; 957 return draw_result;
958 } 958 }
959 959
960 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 960 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
961 // We should only draw for the readback and the replacement commit. 961 // We should only draw for the readback and the replacement commit.
962 // The replacement commit will also be the first commit after output 962 // The replacement commit will also be the first commit after output
963 // surface initialization. 963 // surface initialization.
964 EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0); 964 EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0);
(...skipping 28 matching lines...) Expand all
993 : did_react_to_first_commit_(false) {} 993 : did_react_to_first_commit_(false) {}
994 994
995 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 995 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
996 // This enables forced draws after a single prepare to draw failure. 996 // This enables forced draws after a single prepare to draw failure.
997 settings->timeout_and_draw_when_animation_checkerboards = true; 997 settings->timeout_and_draw_when_animation_checkerboards = true;
998 settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1; 998 settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
999 } 999 }
1000 1000
1001 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 1001 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
1002 1002
1003 virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread( 1003 virtual DrawResult PrepareToDrawOnThread(
1004 LayerTreeHostImpl* host_impl, 1004 LayerTreeHostImpl* host_impl,
1005 LayerTreeHostImpl::FrameData* frame_data, 1005 LayerTreeHostImpl::FrameData* frame_data,
1006 DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE { 1006 DrawResult draw_result) OVERRIDE {
1007 int sfn = host_impl->active_tree()->source_frame_number(); 1007 int sfn = host_impl->active_tree()->source_frame_number();
1008 EXPECT_TRUE(sfn == kFirstOutputSurfaceInitSourceFrameNumber || 1008 EXPECT_TRUE(sfn == kFirstOutputSurfaceInitSourceFrameNumber ||
1009 sfn == kSecondOutputSurfaceInitSourceFrameNumber || 1009 sfn == kSecondOutputSurfaceInitSourceFrameNumber ||
1010 sfn == kReadbackSourceFrameNumber) 1010 sfn == kReadbackSourceFrameNumber)
1011 << sfn; 1011 << sfn;
1012 1012
1013 // Before we react to the failed draw by initiating the forced draw 1013 // Before we react to the failed draw by initiating the forced draw
1014 // sequence, start a readback on the main thread and then lose the context 1014 // sequence, start a readback on the main thread and then lose the context
1015 // to start output surface initialization all at the same time. 1015 // to start output surface initialization all at the same time.
1016 if (sfn == kFirstOutputSurfaceInitSourceFrameNumber && 1016 if (sfn == kFirstOutputSurfaceInitSourceFrameNumber &&
1017 !did_react_to_first_commit_) { 1017 !did_react_to_first_commit_) {
1018 did_react_to_first_commit_ = true; 1018 did_react_to_first_commit_ = true;
1019 PostReadbackToMainThread(); 1019 PostReadbackToMainThread();
1020 LoseContext(); 1020 LoseContext();
1021 } 1021 }
1022 1022
1023 return DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; 1023 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
1024 } 1024 }
1025 1025
1026 virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, 1026 virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl,
1027 bool success) OVERRIDE { 1027 bool success) OVERRIDE {
1028 // -1 is for the first output surface initialization. 1028 // -1 is for the first output surface initialization.
1029 int sfn = host_impl->active_tree()->source_frame_number(); 1029 int sfn = host_impl->active_tree()->source_frame_number();
1030 EXPECT_TRUE(sfn == -1 || sfn == kReadbackReplacementSourceFrameNumber) 1030 EXPECT_TRUE(sfn == -1 || sfn == kReadbackReplacementSourceFrameNumber)
1031 << sfn; 1031 << sfn;
1032 } 1032 }
1033 1033
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 : did_lose_context_(false) {} 1072 : did_lose_context_(false) {}
1073 1073
1074 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 1074 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
1075 // This enables forced draws after a single prepare to draw failure. 1075 // This enables forced draws after a single prepare to draw failure.
1076 settings->timeout_and_draw_when_animation_checkerboards = true; 1076 settings->timeout_and_draw_when_animation_checkerboards = true;
1077 settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1; 1077 settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
1078 } 1078 }
1079 1079
1080 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 1080 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
1081 1081
1082 virtual DrawSwapReadbackResult::DrawResult PrepareToDrawOnThread( 1082 virtual DrawResult PrepareToDrawOnThread(
1083 LayerTreeHostImpl* host_impl, 1083 LayerTreeHostImpl* host_impl,
1084 LayerTreeHostImpl::FrameData* frame_data, 1084 LayerTreeHostImpl::FrameData* frame_data,
1085 DrawSwapReadbackResult::DrawResult draw_result) OVERRIDE { 1085 DrawResult draw_result) OVERRIDE {
1086 int sfn = host_impl->active_tree()->source_frame_number(); 1086 int sfn = host_impl->active_tree()->source_frame_number();
1087 EXPECT_TRUE(sfn == kFirstOutputSurfaceInitSourceFrameNumber || 1087 EXPECT_TRUE(sfn == kFirstOutputSurfaceInitSourceFrameNumber ||
1088 sfn == kSecondOutputSurfaceInitSourceFrameNumber || 1088 sfn == kSecondOutputSurfaceInitSourceFrameNumber ||
1089 sfn == kReadbackSourceFrameNumber) 1089 sfn == kReadbackSourceFrameNumber)
1090 << sfn; 1090 << sfn;
1091 1091
1092 // Before we react to the failed draw by initiating the forced draw 1092 // Before we react to the failed draw by initiating the forced draw
1093 // sequence, start a readback on the main thread and then lose the context 1093 // sequence, start a readback on the main thread and then lose the context
1094 // to start output surface initialization all at the same time. 1094 // to start output surface initialization all at the same time.
1095 if (sfn == kFirstOutputSurfaceInitSourceFrameNumber && !did_lose_context_) { 1095 if (sfn == kFirstOutputSurfaceInitSourceFrameNumber && !did_lose_context_) {
1096 did_lose_context_ = true; 1096 did_lose_context_ = true;
1097 LoseContext(); 1097 LoseContext();
1098 } 1098 }
1099 1099
1100 // Returning false will result in a forced draw. 1100 // Returning false will result in a forced draw.
1101 return DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; 1101 return DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
1102 } 1102 }
1103 1103
1104 virtual void DidInitializeOutputSurface() OVERRIDE { 1104 virtual void DidInitializeOutputSurface() OVERRIDE {
1105 if (layer_tree_host()->source_frame_number() > 0) { 1105 if (layer_tree_host()->source_frame_number() > 0) {
1106 // Perform a readback right after the second output surface 1106 // Perform a readback right after the second output surface
1107 // initialization. 1107 // initialization.
1108 char pixels[4]; 1108 char pixels[4];
1109 layer_tree_host()->CompositeAndReadback(&pixels, gfx::Rect(0, 0, 1, 1)); 1109 layer_tree_host()->CompositeAndReadback(&pixels, gfx::Rect(0, 0, 1, 1));
1110 } 1110 }
1111 } 1111 }
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 1713
1714 protected: 1714 protected:
1715 FakeContentLayerClient client_; 1715 FakeContentLayerClient client_;
1716 scoped_refptr<FakeContentLayer> layer_; 1716 scoped_refptr<FakeContentLayer> layer_;
1717 }; 1717 };
1718 1718
1719 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); 1719 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback);
1720 1720
1721 } // namespace 1721 } // namespace
1722 } // namespace cc 1722 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698