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

Unified Diff: content/browser/aura/reflector_impl.cc

Issue 140753005: Add the UI compositor to the Mac build (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/aura/reflector_impl.h ('k') | content/browser/aura/resize_lock.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/aura/reflector_impl.cc
diff --git a/content/browser/aura/reflector_impl.cc b/content/browser/aura/reflector_impl.cc
deleted file mode 100644
index 6d8e89df70c2bb3e17a137cfe7416f38531fab3f..0000000000000000000000000000000000000000
--- a/content/browser/aura/reflector_impl.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/aura/reflector_impl.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "content/browser/aura/browser_compositor_output_surface.h"
-#include "content/common/gpu/client/gl_helper.h"
-#include "ui/compositor/layer.h"
-
-namespace content {
-
-ReflectorImpl::ReflectorImpl(
- ui::Compositor* mirrored_compositor,
- ui::Layer* mirroring_layer,
- IDMap<BrowserCompositorOutputSurface>* output_surface_map,
- int surface_id)
- : texture_id_(0),
- texture_size_(mirrored_compositor->size()),
- output_surface_map_(output_surface_map),
- mirrored_compositor_(mirrored_compositor),
- mirroring_compositor_(mirroring_layer->GetCompositor()),
- mirroring_layer_(mirroring_layer),
- impl_message_loop_(ui::Compositor::GetCompositorMessageLoop()),
- main_message_loop_(base::MessageLoopProxy::current()),
- surface_id_(surface_id) {
- CreateSharedTexture();
- impl_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::InitOnImplThread, this));
-}
-
-void ReflectorImpl::InitOnImplThread() {
- // Ignore if the reflector was shutdown before
- // initialized, or it's already initialized.
- if (!output_surface_map_ || gl_helper_.get())
- return;
-
- BrowserCompositorOutputSurface* source_surface =
- output_surface_map_->Lookup(surface_id_);
- // Skip if the source surface isn't ready yet. This will be
- // initiailze when the source surface becomes ready.
- if (!source_surface)
- return;
-
- AttachToOutputSurface(source_surface);
- gl_helper_->CopyTextureFullImage(texture_id_, texture_size_);
- // The shared texture doesn't have the data, so invokes full redraw
- // now.
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::FullRedrawContentOnMainThread,
- scoped_refptr<ReflectorImpl>(this)));
-}
-
-void ReflectorImpl::OnSourceSurfaceReady(int surface_id) {
- DCHECK_EQ(surface_id_, surface_id);
- InitOnImplThread();
-}
-
-void ReflectorImpl::Shutdown() {
- mirroring_compositor_ = NULL;
- mirroring_layer_ = NULL;
- shared_texture_ = NULL;
- impl_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::ShutdownOnImplThread, this));
-}
-
-void ReflectorImpl::ShutdownOnImplThread() {
- BrowserCompositorOutputSurface* output_surface =
- output_surface_map_->Lookup(surface_id_);
- if (output_surface)
- output_surface->SetReflector(NULL);
- output_surface_map_ = NULL;
- gl_helper_.reset();
- // The instance must be deleted on main thread.
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::DeleteOnMainThread,
- scoped_refptr<ReflectorImpl>(this)));
-}
-
-// This must be called on ImplThread, or before the surface is passed to
-// ImplThread.
-void ReflectorImpl::AttachToOutputSurface(
- BrowserCompositorOutputSurface* output_surface) {
- gl_helper_.reset(
- new GLHelper(output_surface->context_provider()->ContextGL(),
- output_surface->context_provider()->ContextSupport()));
- output_surface->SetReflector(this);
-}
-
-void ReflectorImpl::OnMirroringCompositorResized() {
- mirroring_compositor_->ScheduleFullRedraw();
-}
-
-void ReflectorImpl::OnLostResources() {
- shared_texture_ = NULL;
- mirroring_layer_->SetShowPaintedContent();
-}
-
-void ReflectorImpl::OnReshape(gfx::Size size) {
- if (texture_size_ == size)
- return;
- texture_size_ = size;
- DCHECK(texture_id_);
- gl_helper_->ResizeTexture(texture_id_, size);
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::UpdateTextureSizeOnMainThread,
- this->AsWeakPtr(),
- texture_size_));
-}
-
-void ReflectorImpl::OnSwapBuffers() {
- DCHECK(texture_id_);
- gl_helper_->CopyTextureFullImage(texture_id_, texture_size_);
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::FullRedrawOnMainThread,
- this->AsWeakPtr(),
- texture_size_));
-}
-
-void ReflectorImpl::OnPostSubBuffer(gfx::Rect rect) {
- DCHECK(texture_id_);
- gl_helper_->CopyTextureSubImage(texture_id_, rect);
- main_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ReflectorImpl::UpdateSubBufferOnMainThread,
- this->AsWeakPtr(),
- texture_size_,
- rect));
-}
-
-void ReflectorImpl::CreateSharedTexture() {
- texture_id_ =
- ImageTransportFactory::GetInstance()->GetGLHelper()->CreateTexture();
- shared_texture_ =
- ImageTransportFactory::GetInstance()->CreateOwnedTexture(
- texture_size_, 1.0f, texture_id_);
- mirroring_layer_->SetExternalTexture(shared_texture_.get());
-}
-
-ReflectorImpl::~ReflectorImpl() {
- // Make sure the reflector is deleted on main thread.
- DCHECK_EQ(main_message_loop_.get(),
- base::MessageLoopProxy::current().get());
-}
-
-void ReflectorImpl::UpdateTextureSizeOnMainThread(gfx::Size size) {
- if (!mirroring_layer_)
- return;
- mirroring_layer_->SetBounds(gfx::Rect(size));
-}
-
-void ReflectorImpl::FullRedrawOnMainThread(gfx::Size size) {
- if (!mirroring_compositor_)
- return;
- UpdateTextureSizeOnMainThread(size);
- mirroring_compositor_->ScheduleFullRedraw();
-}
-
-void ReflectorImpl::UpdateSubBufferOnMainThread(gfx::Size size,
- gfx::Rect rect) {
- if (!mirroring_compositor_)
- return;
- UpdateTextureSizeOnMainThread(size);
- // Flip the coordinates to compositor's one.
- int y = size.height() - rect.y() - rect.height();
- gfx::Rect new_rect(rect.x(), y, rect.width(), rect.height());
- mirroring_layer_->SchedulePaint(new_rect);
-}
-
-void ReflectorImpl::FullRedrawContentOnMainThread() {
- mirrored_compositor_->ScheduleFullRedraw();
-}
-
-} // namespace content
« no previous file with comments | « content/browser/aura/reflector_impl.h ('k') | content/browser/aura/resize_lock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698