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

Side by Side Diff: content/browser/frame_host/render_widget_host_view_child_frame_unittest.cc

Issue 2728183002: RendererCompositorFrameSink should handle local surface id allocation (Closed)
Patch Set: rebase Created 3 years, 9 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/frame_host/render_widget_host_view_child_frame.h" 5 #include "content/browser/frame_host/render_widget_host_view_child_frame.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 15 matching lines...) Expand all
26 #include "content/common/view_messages.h" 26 #include "content/common/view_messages.h"
27 #include "content/public/browser/render_widget_host_view.h" 27 #include "content/public/browser/render_widget_host_view.h"
28 #include "content/public/test/mock_render_process_host.h" 28 #include "content/public/test/mock_render_process_host.h"
29 #include "content/public/test/test_browser_context.h" 29 #include "content/public/test/test_browser_context.h"
30 #include "content/test/test_render_view_host.h" 30 #include "content/test/test_render_view_host.h"
31 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
32 #include "ui/compositor/compositor.h" 32 #include "ui/compositor/compositor.h"
33 33
34 namespace content { 34 namespace content {
35 namespace { 35 namespace {
36
37 const cc::LocalSurfaceId kArbitraryLocalSurfaceId(
38 1,
39 base::UnguessableToken::Deserialize(2, 3));
40
36 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { 41 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
37 public: 42 public:
38 MockRenderWidgetHostDelegate() {} 43 MockRenderWidgetHostDelegate() {}
39 ~MockRenderWidgetHostDelegate() override {} 44 ~MockRenderWidgetHostDelegate() override {}
40 private: 45 private:
41 void Cut() override {} 46 void Cut() override {}
42 void Copy() override {} 47 void Copy() override {}
43 void Paste() override {} 48 void Paste() override {}
44 void SelectAll() override {} 49 void SelectAll() override {}
45 }; 50 };
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 base::RunLoop().RunUntilIdle(); 105 base::RunLoop().RunUntilIdle();
101 #if !defined(OS_ANDROID) 106 #if !defined(OS_ANDROID)
102 ImageTransportFactory::Terminate(); 107 ImageTransportFactory::Terminate();
103 #endif 108 #endif
104 } 109 }
105 110
106 cc::SurfaceId GetSurfaceId() const { 111 cc::SurfaceId GetSurfaceId() const {
107 return cc::SurfaceId(view_->frame_sink_id_, view_->local_surface_id_); 112 return cc::SurfaceId(view_->frame_sink_id_, view_->local_surface_id_);
108 } 113 }
109 114
115 cc::LocalSurfaceId GetLocalSurfaceId() const {
116 return view_->local_surface_id_;
117 }
118
110 void ClearCompositorSurfaceIfNecessary() { 119 void ClearCompositorSurfaceIfNecessary() {
111 view_->ClearCompositorSurfaceIfNecessary(); 120 view_->ClearCompositorSurfaceIfNecessary();
112 } 121 }
113 122
114 protected: 123 protected:
115 base::MessageLoopForUI message_loop_; 124 base::MessageLoopForUI message_loop_;
116 std::unique_ptr<BrowserContext> browser_context_; 125 std::unique_ptr<BrowserContext> browser_context_;
117 MockRenderWidgetHostDelegate delegate_; 126 MockRenderWidgetHostDelegate delegate_;
118 127
119 // Tests should set these to NULL if they've already triggered their 128 // Tests should set these to NULL if they've already triggered their
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 view_->Hide(); 166 view_->Hide();
158 ASSERT_FALSE(view_->IsShowing()); 167 ASSERT_FALSE(view_->IsShowing());
159 } 168 }
160 169
161 // Verify that OnSwapCompositorFrame behavior is correct when a delegated 170 // Verify that OnSwapCompositorFrame behavior is correct when a delegated
162 // frame is received from a renderer process. 171 // frame is received from a renderer process.
163 TEST_F(RenderWidgetHostViewChildFrameTest, MAYBE_SwapCompositorFrame) { 172 TEST_F(RenderWidgetHostViewChildFrameTest, MAYBE_SwapCompositorFrame) {
164 gfx::Size view_size(100, 100); 173 gfx::Size view_size(100, 100);
165 gfx::Rect view_rect(view_size); 174 gfx::Rect view_rect(view_size);
166 float scale_factor = 1.f; 175 float scale_factor = 1.f;
176 cc::LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create());
167 177
168 view_->SetSize(view_size); 178 view_->SetSize(view_size);
169 view_->Show(); 179 view_->Show();
170 180
171 view_->OnSwapCompositorFrame( 181 view_->OnSwapCompositorFrame(
172 0, CreateDelegatedFrame(scale_factor, view_size, view_rect)); 182 0, local_surface_id,
183 CreateDelegatedFrame(scale_factor, view_size, view_rect));
173 184
174 cc::SurfaceId id = GetSurfaceId(); 185 cc::SurfaceId id = GetSurfaceId();
175 if (id.is_valid()) { 186 if (id.is_valid()) {
176 #if !defined(OS_ANDROID) 187 #if !defined(OS_ANDROID)
177 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 188 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
178 cc::SurfaceManager* manager = 189 cc::SurfaceManager* manager =
179 factory->GetContextFactoryPrivate()->GetSurfaceManager(); 190 factory->GetContextFactoryPrivate()->GetSurfaceManager();
180 cc::Surface* surface = manager->GetSurfaceForId(id); 191 cc::Surface* surface = manager->GetSurfaceForId(id);
181 EXPECT_TRUE(surface); 192 EXPECT_TRUE(surface);
182 // There should be a SurfaceSequence created by the RWHVChildFrame. 193 // There should be a SurfaceSequence created by the RWHVChildFrame.
183 EXPECT_EQ(1u, surface->GetDestructionDependencyCount()); 194 EXPECT_EQ(1u, surface->GetDestructionDependencyCount());
184 #endif 195 #endif
185 196
186 // Surface ID should have been passed to CrossProcessFrameConnector to 197 // Surface ID should have been passed to CrossProcessFrameConnector to
187 // be sent to the embedding renderer. 198 // be sent to the embedding renderer.
188 EXPECT_EQ(cc::SurfaceInfo(id, scale_factor, view_size), 199 EXPECT_EQ(cc::SurfaceInfo(id, scale_factor, view_size),
189 test_frame_connector_->last_surface_info_); 200 test_frame_connector_->last_surface_info_);
190 } 201 }
191 } 202 }
192 203
193 // Check that frame eviction does not trigger allocation of a new local surface 204 // Check that the same local surface id can be used after frame eviction.
194 // id. 205 TEST_F(RenderWidgetHostViewChildFrameTest, FrameEviction) {
195 TEST_F(RenderWidgetHostViewChildFrameTest,
196 MAYBE_FrameEvictionKeepsLocalSurfaceId) {
197 gfx::Size view_size(100, 100); 206 gfx::Size view_size(100, 100);
198 gfx::Rect view_rect(view_size); 207 gfx::Rect view_rect(view_size);
199 float scale_factor = 1.f; 208 float scale_factor = 1.f;
200 209
201 view_->SetSize(view_size); 210 view_->SetSize(view_size);
202 view_->Show(); 211 view_->Show();
203 212
204 // Submit a frame. Remember the local surface id and check that has_frame() 213 // Submit a frame.
205 // returns true.
206 view_->OnSwapCompositorFrame( 214 view_->OnSwapCompositorFrame(
207 0, CreateDelegatedFrame(scale_factor, view_size, view_rect)); 215 0, kArbitraryLocalSurfaceId,
216 CreateDelegatedFrame(scale_factor, view_size, view_rect));
208 217
209 cc::SurfaceId surface_id = GetSurfaceId(); 218 EXPECT_EQ(kArbitraryLocalSurfaceId, GetLocalSurfaceId());
210 EXPECT_TRUE(surface_id.is_valid());
211 EXPECT_TRUE(view_->has_frame()); 219 EXPECT_TRUE(view_->has_frame());
212 220
213 // Evict the frame. The surface id must remain the same but has_frame() should 221 // Evict the frame. has_frame() should return false.
214 // return false.
215 ClearCompositorSurfaceIfNecessary(); 222 ClearCompositorSurfaceIfNecessary();
216 EXPECT_EQ(surface_id, GetSurfaceId()); 223 EXPECT_EQ(kArbitraryLocalSurfaceId, GetLocalSurfaceId());
217 EXPECT_FALSE(view_->has_frame()); 224 EXPECT_FALSE(view_->has_frame());
218 225
219 // Submit another frame. Since it has the same size and scale as the first 226 // Submit another frame with the same local surface id. The same id should be
220 // one, the same surface id must be used. has_frame() must return true. 227 // usable.
221 view_->OnSwapCompositorFrame( 228 view_->OnSwapCompositorFrame(
222 0, CreateDelegatedFrame(scale_factor, view_size, view_rect)); 229 0, kArbitraryLocalSurfaceId,
223 EXPECT_EQ(surface_id, GetSurfaceId()); 230 CreateDelegatedFrame(scale_factor, view_size, view_rect));
231 EXPECT_EQ(kArbitraryLocalSurfaceId, GetLocalSurfaceId());
224 EXPECT_TRUE(view_->has_frame()); 232 EXPECT_TRUE(view_->has_frame());
225 } 233 }
226 234
227 } // namespace content 235 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698