OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer_host/compositor_impl_android.h" | 5 #include "content/browser/renderer_host/compositor_impl_android.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 #include <android/native_window_jni.h> | 8 #include <android/native_window_jni.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <unordered_set> | 10 #include <unordered_set> |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 // static | 317 // static |
318 bool CompositorImpl::IsInitialized() { | 318 bool CompositorImpl::IsInitialized() { |
319 return g_initialized; | 319 return g_initialized; |
320 } | 320 } |
321 | 321 |
322 CompositorImpl::CompositorImpl(CompositorClient* client, | 322 CompositorImpl::CompositorImpl(CompositorClient* client, |
323 gfx::NativeWindow root_window) | 323 gfx::NativeWindow root_window) |
324 : frame_sink_id_( | 324 : frame_sink_id_( |
325 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId()), | 325 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId()), |
326 resource_manager_(root_window), | 326 resource_manager_(root_window), |
327 device_scale_factor_(1), | |
328 window_(NULL), | 327 window_(NULL), |
329 surface_handle_(gpu::kNullSurfaceHandle), | 328 surface_handle_(gpu::kNullSurfaceHandle), |
330 client_(client), | 329 client_(client), |
331 root_window_(root_window), | 330 root_window_(root_window), |
332 needs_animate_(false), | 331 needs_animate_(false), |
333 pending_swapbuffers_(0U), | 332 pending_swapbuffers_(0U), |
334 num_successive_context_creation_failures_(0), | 333 num_successive_context_creation_failures_(0), |
335 compositor_frame_sink_request_pending_(false), | 334 compositor_frame_sink_request_pending_(false), |
336 weak_factory_(this) { | 335 weak_factory_(this) { |
337 ui::ContextProviderFactory::GetInstance() | 336 ui::ContextProviderFactory::GetInstance() |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 params.task_graph_runner = g_task_graph_runner.Pointer(); | 435 params.task_graph_runner = g_task_graph_runner.Pointer(); |
437 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); | 436 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); |
438 params.settings = &settings; | 437 params.settings = &settings; |
439 params.mutator_host = animation_host_.get(); | 438 params.mutator_host = animation_host_.get(); |
440 host_ = cc::LayerTreeHostInProcess::CreateSingleThreaded(this, ¶ms); | 439 host_ = cc::LayerTreeHostInProcess::CreateSingleThreaded(this, ¶ms); |
441 DCHECK(!host_->IsVisible()); | 440 DCHECK(!host_->IsVisible()); |
442 host_->GetLayerTree()->SetRootLayer(root_window_->GetLayer()); | 441 host_->GetLayerTree()->SetRootLayer(root_window_->GetLayer()); |
443 host_->SetFrameSinkId(frame_sink_id_); | 442 host_->SetFrameSinkId(frame_sink_id_); |
444 host_->GetLayerTree()->SetViewportSize(size_); | 443 host_->GetLayerTree()->SetViewportSize(size_); |
445 SetHasTransparentBackground(false); | 444 SetHasTransparentBackground(false); |
446 host_->GetLayerTree()->SetDeviceScaleFactor(device_scale_factor_); | 445 host_->GetLayerTree()->SetDeviceScaleFactor(1); |
447 | 446 |
448 if (needs_animate_) | 447 if (needs_animate_) |
449 host_->SetNeedsAnimate(); | 448 host_->SetNeedsAnimate(); |
450 } | 449 } |
451 | 450 |
452 void CompositorImpl::SetVisible(bool visible) { | 451 void CompositorImpl::SetVisible(bool visible) { |
453 TRACE_EVENT1("cc", "CompositorImpl::SetVisible", "visible", visible); | 452 TRACE_EVENT1("cc", "CompositorImpl::SetVisible", "visible", visible); |
454 if (!visible) { | 453 if (!visible) { |
455 DCHECK(host_->IsVisible()); | 454 DCHECK(host_->IsVisible()); |
456 | 455 |
457 // Make a best effort to try to complete pending readbacks. | 456 // Make a best effort to try to complete pending readbacks. |
458 // TODO(crbug.com/637035): Consider doing this in a better way, | 457 // TODO(crbug.com/637035): Consider doing this in a better way, |
459 // ideally with the guarantee of readbacks completing. | 458 // ideally with the guarantee of readbacks completing. |
460 if (display_.get() && HavePendingReadbacks()) | 459 if (display_.get() && HavePendingReadbacks()) |
461 display_->ForceImmediateDrawAndSwapIfPossible(); | 460 display_->ForceImmediateDrawAndSwapIfPossible(); |
462 | 461 |
463 host_->SetVisible(false); | 462 host_->SetVisible(false); |
464 host_->ReleaseCompositorFrameSink(); | 463 host_->ReleaseCompositorFrameSink(); |
465 pending_swapbuffers_ = 0; | 464 pending_swapbuffers_ = 0; |
466 display_.reset(); | 465 display_.reset(); |
467 } else { | 466 } else { |
468 host_->SetVisible(true); | 467 host_->SetVisible(true); |
469 if (compositor_frame_sink_request_pending_) | 468 if (compositor_frame_sink_request_pending_) |
470 HandlePendingCompositorFrameSinkRequest(); | 469 HandlePendingCompositorFrameSinkRequest(); |
471 } | 470 } |
472 } | 471 } |
473 | 472 |
474 void CompositorImpl::setDeviceScaleFactor(float factor) { | |
475 device_scale_factor_ = factor; | |
476 if (host_) | |
477 host_->GetLayerTree()->SetDeviceScaleFactor(factor); | |
478 } | |
479 | |
480 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { | 473 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { |
481 if (size_ == size) | 474 if (size_ == size) |
482 return; | 475 return; |
483 | 476 |
484 size_ = size; | 477 size_ = size; |
485 if (host_) | 478 if (host_) |
486 host_->GetLayerTree()->SetViewportSize(size); | 479 host_->GetLayerTree()->SetViewportSize(size); |
487 if (display_) | 480 if (display_) |
488 display_->Resize(size); | 481 display_->Resize(size); |
489 root_window_->GetLayer()->SetBounds(size); | 482 root_window_->GetLayer()->SetBounds(size); |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 | 727 |
735 cc::FrameSinkId CompositorImpl::GetFrameSinkId() { | 728 cc::FrameSinkId CompositorImpl::GetFrameSinkId() { |
736 return frame_sink_id_; | 729 return frame_sink_id_; |
737 } | 730 } |
738 | 731 |
739 bool CompositorImpl::HavePendingReadbacks() { | 732 bool CompositorImpl::HavePendingReadbacks() { |
740 return !readback_layer_tree_->children().empty(); | 733 return !readback_layer_tree_->children().empty(); |
741 } | 734 } |
742 | 735 |
743 } // namespace content | 736 } // namespace content |
OLD | NEW |