| 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 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 g_shared_vulkan_context_provider_android_.Pointer(); | 358 g_shared_vulkan_context_provider_android_.Pointer(); |
| 359 if (!*context_provider) | 359 if (!*context_provider) |
| 360 *context_provider = cc::VulkanInProcessContextProvider::Create(); | 360 *context_provider = cc::VulkanInProcessContextProvider::Create(); |
| 361 return *context_provider; | 361 return *context_provider; |
| 362 } | 362 } |
| 363 return nullptr; | 363 return nullptr; |
| 364 } | 364 } |
| 365 | 365 |
| 366 CompositorImpl::CompositorImpl(CompositorClient* client, | 366 CompositorImpl::CompositorImpl(CompositorClient* client, |
| 367 gfx::NativeWindow root_window) | 367 gfx::NativeWindow root_window) |
| 368 : root_layer_(cc::Layer::Create()), | 368 : surface_id_allocator_(CreateSurfaceIdAllocator()), |
| 369 surface_id_allocator_(CreateSurfaceIdAllocator()), | |
| 370 resource_manager_(root_window), | 369 resource_manager_(root_window), |
| 371 has_transparent_background_(false), | 370 has_transparent_background_(false), |
| 372 device_scale_factor_(1), | 371 device_scale_factor_(1), |
| 373 window_(NULL), | 372 window_(NULL), |
| 374 surface_handle_(gpu::kNullSurfaceHandle), | 373 surface_handle_(gpu::kNullSurfaceHandle), |
| 375 client_(client), | 374 client_(client), |
| 376 root_window_(root_window), | 375 root_window_(root_window), |
| 377 needs_animate_(false), | 376 needs_animate_(false), |
| 378 pending_swapbuffers_(0U), | 377 pending_swapbuffers_(0U), |
| 379 num_successive_context_creation_failures_(0), | 378 num_successive_context_creation_failures_(0), |
| 380 output_surface_request_pending_(false), | 379 output_surface_request_pending_(false), |
| 381 needs_begin_frames_(false), | 380 needs_begin_frames_(false), |
| 382 weak_factory_(this) { | 381 weak_factory_(this) { |
| 383 DCHECK(client); | 382 DCHECK(client); |
| 384 DCHECK(root_window); | 383 DCHECK(root_window); |
| 384 root_window->SetLayer(cc::Layer::Create()); |
| 385 root_window->AttachCompositor(this); | 385 root_window->AttachCompositor(this); |
| 386 CreateLayerTreeHost(); | 386 CreateLayerTreeHost(); |
| 387 resource_manager_.Init(host_.get()); | 387 resource_manager_.Init(host_.get()); |
| 388 } | 388 } |
| 389 | 389 |
| 390 CompositorImpl::~CompositorImpl() { | 390 CompositorImpl::~CompositorImpl() { |
| 391 root_window_->DetachCompositor(); | 391 root_window_->DetachCompositor(); |
| 392 root_window_->SetLayer(nullptr); |
| 392 // Clean-up any surface references. | 393 // Clean-up any surface references. |
| 393 SetSurface(NULL); | 394 SetSurface(NULL); |
| 394 } | 395 } |
| 395 | 396 |
| 396 ui::UIResourceProvider& CompositorImpl::GetUIResourceProvider() { | 397 ui::UIResourceProvider& CompositorImpl::GetUIResourceProvider() { |
| 397 return *this; | 398 return *this; |
| 398 } | 399 } |
| 399 | 400 |
| 400 ui::ResourceManager& CompositorImpl::GetResourceManager() { | 401 ui::ResourceManager& CompositorImpl::GetResourceManager() { |
| 401 return resource_manager_; | 402 return resource_manager_; |
| 402 } | 403 } |
| 403 | 404 |
| 404 void CompositorImpl::SetRootLayer(scoped_refptr<cc::Layer> root_layer) { | 405 void CompositorImpl::SetRootLayer(scoped_refptr<cc::Layer> root_layer) { |
| 405 if (subroot_layer_.get()) { | 406 if (subroot_layer_.get()) { |
| 406 subroot_layer_->RemoveFromParent(); | 407 subroot_layer_->RemoveFromParent(); |
| 407 subroot_layer_ = NULL; | 408 subroot_layer_ = NULL; |
| 408 } | 409 } |
| 409 if (root_layer.get()) { | 410 if (root_window_->GetLayer()) { |
| 410 subroot_layer_ = root_layer; | 411 subroot_layer_ = root_window_->GetLayer(); |
| 411 root_layer_->AddChild(root_layer); | 412 root_window_->GetLayer()->AddChild(root_layer); |
| 412 } | 413 } |
| 413 } | 414 } |
| 414 | 415 |
| 415 void CompositorImpl::SetSurface(jobject surface) { | 416 void CompositorImpl::SetSurface(jobject surface) { |
| 416 JNIEnv* env = base::android::AttachCurrentThread(); | 417 JNIEnv* env = base::android::AttachCurrentThread(); |
| 417 base::android::ScopedJavaLocalRef<jobject> j_surface(env, surface); | 418 base::android::ScopedJavaLocalRef<jobject> j_surface(env, surface); |
| 418 | 419 |
| 419 GpuSurfaceTracker* tracker = GpuSurfaceTracker::Get(); | 420 GpuSurfaceTracker* tracker = GpuSurfaceTracker::Get(); |
| 420 | 421 |
| 421 if (window_) { | 422 if (window_) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 cc::LayerTreeHost::InitParams params; | 468 cc::LayerTreeHost::InitParams params; |
| 468 params.client = this; | 469 params.client = this; |
| 469 params.shared_bitmap_manager = HostSharedBitmapManager::current(); | 470 params.shared_bitmap_manager = HostSharedBitmapManager::current(); |
| 470 params.gpu_memory_buffer_manager = BrowserGpuMemoryBufferManager::current(); | 471 params.gpu_memory_buffer_manager = BrowserGpuMemoryBufferManager::current(); |
| 471 params.task_graph_runner = g_task_graph_runner.Pointer(); | 472 params.task_graph_runner = g_task_graph_runner.Pointer(); |
| 472 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); | 473 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); |
| 473 params.settings = &settings; | 474 params.settings = &settings; |
| 474 params.animation_host = cc::AnimationHost::CreateMainInstance(); | 475 params.animation_host = cc::AnimationHost::CreateMainInstance(); |
| 475 host_ = cc::LayerTreeHost::CreateSingleThreaded(this, ¶ms); | 476 host_ = cc::LayerTreeHost::CreateSingleThreaded(this, ¶ms); |
| 476 DCHECK(!host_->visible()); | 477 DCHECK(!host_->visible()); |
| 477 host_->SetRootLayer(root_layer_); | 478 host_->SetRootLayer(root_window_->GetLayer()); |
| 478 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); | 479 host_->set_surface_id_namespace(surface_id_allocator_->id_namespace()); |
| 479 host_->SetViewportSize(size_); | 480 host_->SetViewportSize(size_); |
| 480 host_->set_has_transparent_background(has_transparent_background_); | 481 host_->set_has_transparent_background(has_transparent_background_); |
| 481 host_->SetDeviceScaleFactor(device_scale_factor_); | 482 host_->SetDeviceScaleFactor(device_scale_factor_); |
| 482 | 483 |
| 483 if (needs_animate_) | 484 if (needs_animate_) |
| 484 host_->SetNeedsAnimate(); | 485 host_->SetNeedsAnimate(); |
| 485 } | 486 } |
| 486 | 487 |
| 487 void CompositorImpl::SetVisible(bool visible) { | 488 void CompositorImpl::SetVisible(bool visible) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 509 | 510 |
| 510 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { | 511 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { |
| 511 if (size_ == size) | 512 if (size_ == size) |
| 512 return; | 513 return; |
| 513 | 514 |
| 514 size_ = size; | 515 size_ = size; |
| 515 if (host_) | 516 if (host_) |
| 516 host_->SetViewportSize(size); | 517 host_->SetViewportSize(size); |
| 517 if (display_) | 518 if (display_) |
| 518 display_->Resize(size); | 519 display_->Resize(size); |
| 519 root_layer_->SetBounds(size); | 520 root_window_->GetLayer()->SetBounds(size); |
| 520 } | 521 } |
| 521 | 522 |
| 522 void CompositorImpl::SetHasTransparentBackground(bool flag) { | 523 void CompositorImpl::SetHasTransparentBackground(bool flag) { |
| 523 has_transparent_background_ = flag; | 524 has_transparent_background_ = flag; |
| 524 if (host_) | 525 if (host_) |
| 525 host_->set_has_transparent_background(flag); | 526 host_->set_has_transparent_background(flag); |
| 526 } | 527 } |
| 527 | 528 |
| 528 void CompositorImpl::SetNeedsComposite() { | 529 void CompositorImpl::SetNeedsComposite() { |
| 529 if (!host_->visible()) | 530 if (!host_->visible()) |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 host_->SetNeedsCommit(); | 774 host_->SetNeedsCommit(); |
| 774 client_->OnSwapBuffersCompleted(0); | 775 client_->OnSwapBuffersCompleted(0); |
| 775 } | 776 } |
| 776 | 777 |
| 777 void CompositorImpl::DidCommit() { | 778 void CompositorImpl::DidCommit() { |
| 778 root_window_->OnCompositingDidCommit(); | 779 root_window_->OnCompositingDidCommit(); |
| 779 } | 780 } |
| 780 | 781 |
| 781 void CompositorImpl::RequestCopyOfOutputOnRootLayer( | 782 void CompositorImpl::RequestCopyOfOutputOnRootLayer( |
| 782 std::unique_ptr<cc::CopyOutputRequest> request) { | 783 std::unique_ptr<cc::CopyOutputRequest> request) { |
| 783 root_layer_->RequestCopyOfOutput(std::move(request)); | 784 root_window_->GetLayer()->RequestCopyOfOutput(std::move(request)); |
| 784 } | 785 } |
| 785 | 786 |
| 786 void CompositorImpl::OnVSync(base::TimeTicks frame_time, | 787 void CompositorImpl::OnVSync(base::TimeTicks frame_time, |
| 787 base::TimeDelta vsync_period) { | 788 base::TimeDelta vsync_period) { |
| 788 FOR_EACH_OBSERVER(VSyncObserver, observer_list_, | 789 FOR_EACH_OBSERVER(VSyncObserver, observer_list_, |
| 789 OnVSync(frame_time, vsync_period)); | 790 OnVSync(frame_time, vsync_period)); |
| 790 if (needs_begin_frames_) | 791 if (needs_begin_frames_) |
| 791 root_window_->RequestVSyncUpdate(); | 792 root_window_->RequestVSyncUpdate(); |
| 792 } | 793 } |
| 793 | 794 |
| 794 void CompositorImpl::OnNeedsBeginFramesChange(bool needs_begin_frames) { | 795 void CompositorImpl::OnNeedsBeginFramesChange(bool needs_begin_frames) { |
| 795 if (needs_begin_frames_ == needs_begin_frames) | 796 if (needs_begin_frames_ == needs_begin_frames) |
| 796 return; | 797 return; |
| 797 | 798 |
| 798 needs_begin_frames_ = needs_begin_frames; | 799 needs_begin_frames_ = needs_begin_frames; |
| 799 if (needs_begin_frames_) | 800 if (needs_begin_frames_) |
| 800 root_window_->RequestVSyncUpdate(); | 801 root_window_->RequestVSyncUpdate(); |
| 801 } | 802 } |
| 802 | 803 |
| 803 void CompositorImpl::SetNeedsAnimate() { | 804 void CompositorImpl::SetNeedsAnimate() { |
| 804 needs_animate_ = true; | 805 needs_animate_ = true; |
| 805 if (!host_->visible()) | 806 if (!host_->visible()) |
| 806 return; | 807 return; |
| 807 | 808 |
| 808 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate"); | 809 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate"); |
| 809 host_->SetNeedsAnimate(); | 810 host_->SetNeedsAnimate(); |
| 810 } | 811 } |
| 811 | 812 |
| 812 } // namespace content | 813 } // namespace content |
| OLD | NEW |