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

Side by Side Diff: cc/surfaces/display.cc

Issue 2098953003: Make cc::CompositorFrames movable [Part 2 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Android compiles locally Created 4 years, 6 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 "cc/surfaces/display.h" 5 #include "cc/surfaces/display.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 TRACE_EVENT_INSTANT0("cc", "No root surface.", TRACE_EVENT_SCOPE_THREAD); 219 TRACE_EVENT_INSTANT0("cc", "No root surface.", TRACE_EVENT_SCOPE_THREAD);
220 return false; 220 return false;
221 } 221 }
222 222
223 InitializeRenderer(); 223 InitializeRenderer();
224 if (!output_surface_) { 224 if (!output_surface_) {
225 TRACE_EVENT_INSTANT0("cc", "No output surface", TRACE_EVENT_SCOPE_THREAD); 225 TRACE_EVENT_INSTANT0("cc", "No output surface", TRACE_EVENT_SCOPE_THREAD);
226 return false; 226 return false;
227 } 227 }
228 228
229 std::unique_ptr<CompositorFrame> frame = 229 CompositorFrame frame = aggregator_->Aggregate(current_surface_id_);
230 aggregator_->Aggregate(current_surface_id_); 230 if (!frame.delegated_frame_data) {
231 if (!frame) {
232 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", 231 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.",
233 TRACE_EVENT_SCOPE_THREAD); 232 TRACE_EVENT_SCOPE_THREAD);
234 return false; 233 return false;
235 } 234 }
236 235
237 // Run callbacks early to allow pipelining. 236 // Run callbacks early to allow pipelining.
238 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { 237 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) {
239 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first); 238 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first);
240 if (surface) 239 if (surface)
241 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAWN); 240 surface->RunDrawCallbacks(SurfaceDrawStatus::DRAWN);
242 } 241 }
243 242
244 DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); 243 DelegatedFrameData* frame_data = frame.delegated_frame_data.get();
245 244
246 frame->metadata.latency_info.insert(frame->metadata.latency_info.end(), 245 frame.metadata.latency_info.insert(frame.metadata.latency_info.end(),
247 stored_latency_info_.begin(), 246 stored_latency_info_.begin(),
248 stored_latency_info_.end()); 247 stored_latency_info_.end());
249 stored_latency_info_.clear(); 248 stored_latency_info_.clear();
250 bool have_copy_requests = false; 249 bool have_copy_requests = false;
251 for (const auto& pass : frame_data->render_pass_list) { 250 for (const auto& pass : frame_data->render_pass_list) {
252 have_copy_requests |= !pass->copy_requests.empty(); 251 have_copy_requests |= !pass->copy_requests.empty();
253 } 252 }
254 253
255 gfx::Size surface_size; 254 gfx::Size surface_size;
256 bool have_damage = false; 255 bool have_damage = false;
257 if (!frame_data->render_pass_list.empty()) { 256 if (!frame_data->render_pass_list.empty()) {
258 RenderPass& last_render_pass = *frame_data->render_pass_list.back(); 257 RenderPass& last_render_pass = *frame_data->render_pass_list.back();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_, 292 renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_,
294 device_viewport_rect, device_clip_rect, 293 device_viewport_rect, device_clip_rect,
295 disable_picture_quad_image_filtering); 294 disable_picture_quad_image_filtering);
296 } else { 295 } else {
297 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); 296 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD);
298 } 297 }
299 298
300 bool should_swap = should_draw && size_matches; 299 bool should_swap = should_draw && size_matches;
301 if (should_swap) { 300 if (should_swap) {
302 swapped_since_resize_ = true; 301 swapped_since_resize_ = true;
303 for (auto& latency : frame->metadata.latency_info) { 302 for (auto& latency : frame.metadata.latency_info) {
304 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", 303 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow",
305 TRACE_ID_DONT_MANGLE(latency.trace_id()), 304 TRACE_ID_DONT_MANGLE(latency.trace_id()),
306 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, 305 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
307 "step", "Display::DrawAndSwap"); 306 "step", "Display::DrawAndSwap");
308 } 307 }
309 benchmark_instrumentation::IssueDisplayRenderingStatsEvent(); 308 benchmark_instrumentation::IssueDisplayRenderingStatsEvent();
310 renderer_->SwapBuffers(std::move(frame->metadata)); 309 renderer_->SwapBuffers(std::move(frame.metadata));
311 } else { 310 } else {
312 if (have_damage && !size_matches) 311 if (have_damage && !size_matches)
313 aggregator_->SetFullDamageForSurface(current_surface_id_); 312 aggregator_->SetFullDamageForSurface(current_surface_id_);
314 TRACE_EVENT_INSTANT0("cc", "Swap skipped.", TRACE_EVENT_SCOPE_THREAD); 313 TRACE_EVENT_INSTANT0("cc", "Swap skipped.", TRACE_EVENT_SCOPE_THREAD);
315 stored_latency_info_.insert(stored_latency_info_.end(), 314 stored_latency_info_.insert(stored_latency_info_.end(),
316 frame->metadata.latency_info.begin(), 315 frame.metadata.latency_info.begin(),
317 frame->metadata.latency_info.end()); 316 frame.metadata.latency_info.end());
318 DidSwapBuffers(); 317 DidSwapBuffers();
319 DidSwapBuffersComplete(); 318 DidSwapBuffersComplete();
320 } 319 }
321 320
322 return true; 321 return true;
323 } 322 }
324 323
325 void Display::DidSwapBuffers() { 324 void Display::DidSwapBuffers() {
326 if (scheduler_) 325 if (scheduler_)
327 scheduler_->DidSwapBuffers(); 326 scheduler_->DidSwapBuffers();
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 409
411 if (surface_id == current_surface_id_) 410 if (surface_id == current_surface_id_)
412 UpdateRootSurfaceResourcesLocked(); 411 UpdateRootSurfaceResourcesLocked();
413 } 412 }
414 413
415 SurfaceId Display::CurrentSurfaceId() { 414 SurfaceId Display::CurrentSurfaceId() {
416 return current_surface_id_; 415 return current_surface_id_;
417 } 416 }
418 417
419 } // namespace cc 418 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698