OLD | NEW |
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 "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "cc/output/compositor_frame.h" | 9 #include "cc/output/compositor_frame.h" |
10 #include "cc/output/compositor_frame_ack.h" | 10 #include "cc/output/compositor_frame_ack.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 75 |
76 //////////////////////////////////////////////////////////////////////////////// | 76 //////////////////////////////////////////////////////////////////////////////// |
77 // DelegatedFrameHost | 77 // DelegatedFrameHost |
78 | 78 |
79 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) | 79 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) |
80 : client_(client), | 80 : client_(client), |
81 use_surfaces_(UseSurfacesEnabled()), | 81 use_surfaces_(UseSurfacesEnabled()), |
82 last_output_surface_id_(0), | 82 last_output_surface_id_(0), |
83 pending_delegated_ack_count_(0), | 83 pending_delegated_ack_count_(0), |
84 skipped_frames_(false), | 84 skipped_frames_(false), |
| 85 current_scale_factor_(1.f), |
85 can_lock_compositor_(YES_CAN_LOCK), | 86 can_lock_compositor_(YES_CAN_LOCK), |
86 delegated_frame_evictor_(new DelegatedFrameEvictor(this)) { | 87 delegated_frame_evictor_(new DelegatedFrameEvictor(this)) { |
87 ImageTransportFactory::GetInstance()->AddObserver(this); | 88 ImageTransportFactory::GetInstance()->AddObserver(this); |
88 } | 89 } |
89 | 90 |
90 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { | 91 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { |
91 delegated_frame_evictor_->SetVisible(true); | 92 delegated_frame_evictor_->SetVisible(true); |
92 | 93 |
93 if (surface_id_.is_null() && !frame_provider_.get() && | 94 if (surface_id_.is_null() && !frame_provider_.get() && |
94 !released_front_lock_.get()) { | 95 !released_front_lock_.get()) { |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 frame_size_in_dip != current_frame_size_in_dip_) { | 401 frame_size_in_dip != current_frame_size_in_dip_) { |
401 if (!surface_id_.is_null()) | 402 if (!surface_id_.is_null()) |
402 surface_factory_->Destroy(surface_id_); | 403 surface_factory_->Destroy(surface_id_); |
403 surface_id_ = id_allocator_->GenerateId(); | 404 surface_id_ = id_allocator_->GenerateId(); |
404 surface_factory_->Create(surface_id_, frame_size); | 405 surface_factory_->Create(surface_id_, frame_size); |
405 // manager must outlive compositors using it. | 406 // manager must outlive compositors using it. |
406 client_->GetLayer()->SetShowSurface( | 407 client_->GetLayer()->SetShowSurface( |
407 surface_id_, | 408 surface_id_, |
408 base::Bind(&SatisfyCallback, base::Unretained(manager)), | 409 base::Bind(&SatisfyCallback, base::Unretained(manager)), |
409 base::Bind(&RequireCallback, base::Unretained(manager)), frame_size, | 410 base::Bind(&RequireCallback, base::Unretained(manager)), frame_size, |
410 frame_size_in_dip); | 411 frame_device_scale_factor, frame_size_in_dip); |
411 current_surface_size_ = frame_size; | 412 current_surface_size_ = frame_size; |
| 413 current_scale_factor_ = frame_device_scale_factor; |
412 } | 414 } |
413 scoped_ptr<cc::CompositorFrame> compositor_frame = | 415 scoped_ptr<cc::CompositorFrame> compositor_frame = |
414 make_scoped_ptr(new cc::CompositorFrame()); | 416 make_scoped_ptr(new cc::CompositorFrame()); |
415 compositor_frame->delegated_frame_data = frame_data.Pass(); | 417 compositor_frame->delegated_frame_data = frame_data.Pass(); |
416 | 418 |
417 compositor_frame->metadata.latency_info.swap(skipped_latency_info_list_); | 419 compositor_frame->metadata.latency_info.swap(skipped_latency_info_list_); |
418 compositor_frame->metadata.latency_info.insert( | 420 compositor_frame->metadata.latency_info.insert( |
419 compositor_frame->metadata.latency_info.end(), | 421 compositor_frame->metadata.latency_info.end(), |
420 latency_info.begin(), | 422 latency_info.begin(), |
421 latency_info.end()); | 423 latency_info.end()); |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 if (frame_provider_.get()) { | 1009 if (frame_provider_.get()) { |
1008 new_layer->SetShowDelegatedContent(frame_provider_.get(), | 1010 new_layer->SetShowDelegatedContent(frame_provider_.get(), |
1009 current_frame_size_in_dip_); | 1011 current_frame_size_in_dip_); |
1010 } | 1012 } |
1011 if (!surface_id_.is_null()) { | 1013 if (!surface_id_.is_null()) { |
1012 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 1014 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
1013 cc::SurfaceManager* manager = factory->GetSurfaceManager(); | 1015 cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
1014 new_layer->SetShowSurface( | 1016 new_layer->SetShowSurface( |
1015 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), | 1017 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), |
1016 base::Bind(&RequireCallback, base::Unretained(manager)), | 1018 base::Bind(&RequireCallback, base::Unretained(manager)), |
1017 current_surface_size_, current_frame_size_in_dip_); | 1019 current_surface_size_, current_scale_factor_, |
| 1020 current_frame_size_in_dip_); |
1018 } | 1021 } |
1019 } | 1022 } |
1020 | 1023 |
1021 } // namespace content | 1024 } // namespace content |
OLD | NEW |