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

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

Issue 1461463002: Reland fix for thumbnail generation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tight ownership of context, still ref counted Created 4 years, 11 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/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 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 if (resource_collection_.get()) { 403 if (resource_collection_.get()) {
404 resource_collection_->SetClient(NULL); 404 resource_collection_->SetClient(NULL);
405 405
406 if (resource_collection_->LoseAllResources()) 406 if (resource_collection_->LoseAllResources())
407 SendReturnedDelegatedResources(last_output_surface_id_); 407 SendReturnedDelegatedResources(last_output_surface_id_);
408 408
409 resource_collection_ = NULL; 409 resource_collection_ = NULL;
410 } 410 }
411 last_output_surface_id_ = output_surface_id; 411 last_output_surface_id_ = output_surface_id;
412 } 412 }
413 bool immediate_ack = !compositor_; 413 bool skip_frame_size_mismatch = false;
414 pending_delegated_ack_count_++; 414 pending_delegated_ack_count_++;
415 415
416 if (frame_size.IsEmpty()) { 416 if (frame_size.IsEmpty()) {
417 DCHECK(frame_data->resource_list.empty()); 417 DCHECK(frame_data->resource_list.empty());
418 EvictDelegatedFrame(); 418 EvictDelegatedFrame();
419 } else { 419 } else {
420 if (use_surfaces_) { 420 if (use_surfaces_) {
421 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 421 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
422 cc::SurfaceManager* manager = factory->GetSurfaceManager(); 422 cc::SurfaceManager* manager = factory->GetSurfaceManager();
423 if (!surface_factory_) { 423 if (!surface_factory_) {
(...skipping 16 matching lines...) Expand all
440 current_scale_factor_ = frame_device_scale_factor; 440 current_scale_factor_ = frame_device_scale_factor;
441 } 441 }
442 442
443 frame->metadata.latency_info.insert(frame->metadata.latency_info.end(), 443 frame->metadata.latency_info.insert(frame->metadata.latency_info.end(),
444 skipped_latency_info_list_.begin(), 444 skipped_latency_info_list_.begin(),
445 skipped_latency_info_list_.end()); 445 skipped_latency_info_list_.end());
446 skipped_latency_info_list_.clear(); 446 skipped_latency_info_list_.clear();
447 447
448 gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP(); 448 gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP();
449 if (desired_size != frame_size_in_dip && !desired_size.IsEmpty()) 449 if (desired_size != frame_size_in_dip && !desired_size.IsEmpty())
450 immediate_ack = true; 450 skip_frame_size_mismatch = true;
451 451
452 cc::SurfaceFactory::DrawCallback ack_callback; 452 cc::SurfaceFactory::DrawCallback ack_callback;
453 if (compositor_ && !immediate_ack) { 453 if (compositor_ && !skip_frame_size_mismatch) {
454 ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn, 454 ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn,
455 AsWeakPtr(), output_surface_id); 455 AsWeakPtr(), output_surface_id);
456 } 456 }
457 surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame), 457 surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame),
458 ack_callback); 458 ack_callback);
459 } else { 459 } else {
460 if (!resource_collection_.get()) { 460 if (!resource_collection_.get()) {
461 resource_collection_ = new cc::DelegatedFrameResourceCollection; 461 resource_collection_ = new cc::DelegatedFrameResourceCollection;
462 resource_collection_->SetClient(this); 462 resource_collection_->SetClient(this);
463 } 463 }
(...skipping 15 matching lines...) Expand all
479 } 479 }
480 } 480 }
481 released_front_lock_ = NULL; 481 released_front_lock_ = NULL;
482 current_frame_size_in_dip_ = frame_size_in_dip; 482 current_frame_size_in_dip_ = frame_size_in_dip;
483 CheckResizeLock(); 483 CheckResizeLock();
484 484
485 if (!damage_rect_in_dip.IsEmpty()) 485 if (!damage_rect_in_dip.IsEmpty())
486 client_->DelegatedFrameHostGetLayer()->OnDelegatedFrameDamage( 486 client_->DelegatedFrameHostGetLayer()->OnDelegatedFrameDamage(
487 damage_rect_in_dip); 487 damage_rect_in_dip);
488 488
489 if (immediate_ack) { 489 // Note that |compositor_| may be reset by SetShowSurface or
490 // SetShowDelegatedContent above.
491 if (!compositor_ || skip_frame_size_mismatch) {
490 SendDelegatedFrameAck(output_surface_id); 492 SendDelegatedFrameAck(output_surface_id);
491 } else if (!use_surfaces_) { 493 } else if (!use_surfaces_) {
492 std::vector<ui::LatencyInfo>::const_iterator it; 494 std::vector<ui::LatencyInfo>::const_iterator it;
493 for (it = frame->metadata.latency_info.begin(); 495 for (it = frame->metadata.latency_info.begin();
494 it != frame->metadata.latency_info.end(); ++it) 496 it != frame->metadata.latency_info.end(); ++it)
495 compositor_->SetLatencyInfo(*it); 497 compositor_->SetLatencyInfo(*it);
496 // If we've previously skipped any latency infos add them. 498 // If we've previously skipped any latency infos add them.
497 for (it = skipped_latency_info_list_.begin(); 499 for (it = skipped_latency_info_list_.begin();
498 it != skipped_latency_info_list_.end(); 500 it != skipped_latency_info_list_.end();
499 ++it) 501 ++it)
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 cc::SurfaceManager* manager = factory->GetSurfaceManager(); 1078 cc::SurfaceManager* manager = factory->GetSurfaceManager();
1077 new_layer->SetShowSurface( 1079 new_layer->SetShowSurface(
1078 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), 1080 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)),
1079 base::Bind(&RequireCallback, base::Unretained(manager)), 1081 base::Bind(&RequireCallback, base::Unretained(manager)),
1080 current_surface_size_, current_scale_factor_, 1082 current_surface_size_, current_scale_factor_,
1081 current_frame_size_in_dip_); 1083 current_frame_size_in_dip_);
1082 } 1084 }
1083 } 1085 }
1084 1086
1085 } // namespace content 1087 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698