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

Side by Side Diff: content/browser/compositor/delegated_frame_host.cc

Issue 1493013002: cc: Force commit on the frame after a copy request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comments Created 5 years 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
« no previous file with comments | « content/browser/compositor/delegated_frame_host.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/compositor/delegated_frame_host.h" 5 #include "content/browser/compositor/delegated_frame_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // DelegatedFrameHost 63 // DelegatedFrameHost
64 64
65 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) 65 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client)
66 : client_(client), 66 : client_(client),
67 compositor_(nullptr), 67 compositor_(nullptr),
68 use_surfaces_(UseSurfacesEnabled()), 68 use_surfaces_(UseSurfacesEnabled()),
69 tick_clock_(new base::DefaultTickClock()), 69 tick_clock_(new base::DefaultTickClock()),
70 last_output_surface_id_(0), 70 last_output_surface_id_(0),
71 pending_delegated_ack_count_(0), 71 pending_delegated_ack_count_(0),
72 skipped_frames_(false), 72 skipped_frames_(false),
73 force_commit_for_next_frame_(false),
73 current_scale_factor_(1.f), 74 current_scale_factor_(1.f),
74 can_lock_compositor_(YES_CAN_LOCK), 75 can_lock_compositor_(YES_CAN_LOCK),
75 delegated_frame_evictor_(new DelegatedFrameEvictor(this)) { 76 delegated_frame_evictor_(new DelegatedFrameEvictor(this)) {
76 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 77 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
77 factory->AddObserver(this); 78 factory->AddObserver(this);
78 id_allocator_ = factory->GetContextFactory()->CreateSurfaceIdAllocator(); 79 id_allocator_ = factory->GetContextFactory()->CreateSurfaceIdAllocator();
79 } 80 }
80 81
81 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { 82 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) {
82 delegated_frame_evictor_->SetVisible(true); 83 delegated_frame_evictor_->SetVisible(true);
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 343
343 gfx::Size frame_size = root_pass->output_rect.size(); 344 gfx::Size frame_size = root_pass->output_rect.size();
344 gfx::Size frame_size_in_dip = 345 gfx::Size frame_size_in_dip =
345 gfx::ConvertSizeToDIP(frame_device_scale_factor, frame_size); 346 gfx::ConvertSizeToDIP(frame_device_scale_factor, frame_size);
346 347
347 gfx::Rect damage_rect = root_pass->damage_rect; 348 gfx::Rect damage_rect = root_pass->damage_rect;
348 damage_rect.Intersect(gfx::Rect(frame_size)); 349 damage_rect.Intersect(gfx::Rect(frame_size));
349 gfx::Rect damage_rect_in_dip = 350 gfx::Rect damage_rect_in_dip =
350 gfx::ConvertRectToDIP(frame_device_scale_factor, damage_rect); 351 gfx::ConvertRectToDIP(frame_device_scale_factor, damage_rect);
351 352
353 if (compositor_ && force_commit_for_next_frame_) {
354 force_commit_for_next_frame_ = false;
355 compositor_->ScheduleDraw();
356 }
357
352 if (ShouldSkipFrame(frame_size_in_dip)) { 358 if (ShouldSkipFrame(frame_size_in_dip)) {
353 cc::CompositorFrameAck ack; 359 cc::CompositorFrameAck ack;
354 cc::TransferableResource::ReturnResources(frame_data->resource_list, 360 cc::TransferableResource::ReturnResources(frame_data->resource_list,
355 &ack.resources); 361 &ack.resources);
356 362
357 skipped_latency_info_list_.insert(skipped_latency_info_list_.end(), 363 skipped_latency_info_list_.insert(skipped_latency_info_list_.end(),
358 frame->metadata.latency_info.begin(), 364 frame->metadata.latency_info.begin(),
359 frame->metadata.latency_info.end()); 365 frame->metadata.latency_info.end());
360 366
361 client_->DelegatedFrameHostSendCompositorSwapAck(output_surface_id, ack); 367 client_->DelegatedFrameHostSendCompositorSwapAck(output_surface_id, ack);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 resource_collection_.get(), std::move(frame->delegated_frame_data)); 468 resource_collection_.get(), std::move(frame->delegated_frame_data));
463 client_->DelegatedFrameHostGetLayer()->SetShowDelegatedContent( 469 client_->DelegatedFrameHostGetLayer()->SetShowDelegatedContent(
464 frame_provider_.get(), frame_size_in_dip); 470 frame_provider_.get(), frame_size_in_dip);
465 } else { 471 } else {
466 frame_provider_->SetFrameData(std::move(frame->delegated_frame_data)); 472 frame_provider_->SetFrameData(std::move(frame->delegated_frame_data));
467 } 473 }
468 } 474 }
469 } 475 }
470 released_front_lock_ = NULL; 476 released_front_lock_ = NULL;
471 current_frame_size_in_dip_ = frame_size_in_dip; 477 current_frame_size_in_dip_ = frame_size_in_dip;
478
472 CheckResizeLock(); 479 CheckResizeLock();
473 480
474 if (!damage_rect_in_dip.IsEmpty()) 481 if (!damage_rect_in_dip.IsEmpty())
475 client_->DelegatedFrameHostGetLayer()->OnDelegatedFrameDamage( 482 client_->DelegatedFrameHostGetLayer()->OnDelegatedFrameDamage(
476 damage_rect_in_dip); 483 damage_rect_in_dip);
477 484
478 if (immediate_ack) { 485 if (immediate_ack) {
479 SendDelegatedFrameAck(output_surface_id); 486 SendDelegatedFrameAck(output_surface_id);
480 } else if (!use_surfaces_) { 487 } else if (!use_surfaces_) {
481 std::vector<ui::LatencyInfo>::const_iterator it; 488 std::vector<ui::LatencyInfo>::const_iterator it;
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 DCHECK(frame_provider_.get() || !surface_id_.is_null()); 1033 DCHECK(frame_provider_.get() || !surface_id_.is_null());
1027 delegated_frame_evictor_->LockFrame(); 1034 delegated_frame_evictor_->LockFrame();
1028 } 1035 }
1029 1036
1030 void DelegatedFrameHost::RequestCopyOfOutput( 1037 void DelegatedFrameHost::RequestCopyOfOutput(
1031 scoped_ptr<cc::CopyOutputRequest> request) { 1038 scoped_ptr<cc::CopyOutputRequest> request) {
1032 if (!request_copy_of_output_callback_for_testing_.is_null()) 1039 if (!request_copy_of_output_callback_for_testing_.is_null())
1033 request_copy_of_output_callback_for_testing_.Run(request.Pass()); 1040 request_copy_of_output_callback_for_testing_.Run(request.Pass());
1034 else 1041 else
1035 client_->DelegatedFrameHostGetLayer()->RequestCopyOfOutput(request.Pass()); 1042 client_->DelegatedFrameHostGetLayer()->RequestCopyOfOutput(request.Pass());
1043
1044 force_commit_for_next_frame_ = true;
miu 2015/12/02 20:32:57 Idea: Should you also call compositor_->ScheduleDr
ccameron 2015/12/02 23:03:22 That would seem like a separate bug if we're not g
miu 2015/12/03 00:23:41 Acknowledged.
1036 } 1045 }
1037 1046
1038 void DelegatedFrameHost::UnlockResources() { 1047 void DelegatedFrameHost::UnlockResources() {
1039 DCHECK(frame_provider_.get() || !surface_id_.is_null()); 1048 DCHECK(frame_provider_.get() || !surface_id_.is_null());
1040 delegated_frame_evictor_->UnlockFrame(); 1049 delegated_frame_evictor_->UnlockFrame();
1041 } 1050 }
1042 1051
1043 //////////////////////////////////////////////////////////////////////////////// 1052 ////////////////////////////////////////////////////////////////////////////////
1044 // DelegatedFrameHost, ui::LayerOwnerDelegate implementation: 1053 // DelegatedFrameHost, ui::LayerOwnerDelegate implementation:
1045 1054
(...skipping 11 matching lines...) Expand all
1057 cc::SurfaceManager* manager = factory->GetSurfaceManager(); 1066 cc::SurfaceManager* manager = factory->GetSurfaceManager();
1058 new_layer->SetShowSurface( 1067 new_layer->SetShowSurface(
1059 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), 1068 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)),
1060 base::Bind(&RequireCallback, base::Unretained(manager)), 1069 base::Bind(&RequireCallback, base::Unretained(manager)),
1061 current_surface_size_, current_scale_factor_, 1070 current_surface_size_, current_scale_factor_,
1062 current_frame_size_in_dip_); 1071 current_frame_size_in_dip_);
1063 } 1072 }
1064 } 1073 }
1065 1074
1066 } // namespace content 1075 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/compositor/delegated_frame_host.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698