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

Unified Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 213493002: content: Add multi-proc surface texture support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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
Index: content/browser/renderer_host/compositor_impl_android.cc
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 5427692d5ea970b3874e18cf14f67eb3737f2592..0ed33f4b9fad49dc19df2323ddfc2962d2f39f0a 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -12,7 +12,6 @@
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
#include "base/command_line.h"
-#include "base/containers/scoped_ptr_hash_map.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
@@ -37,6 +36,7 @@
#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
#include "content/common/gpu/gpu_process_launch_causes.h"
#include "content/public/browser/android/compositor_client.h"
+#include "content/public/browser/browser_thread.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"
@@ -136,25 +136,13 @@ class TransientUIResource : public cc::ScopedUIResource {
bool retrieved_;
};
-class SurfaceTextureTrackerImpl : public gfx::SurfaceTextureTracker {
+class SurfaceTextureManager {
public:
- SurfaceTextureTrackerImpl() : next_surface_texture_id_(1) {
+ SurfaceTextureManager() : next_surface_texture_id_(1) {
thread_checker_.DetachFromThread();
}
- // Overridden from gfx::SurfaceTextureTracker:
- virtual scoped_refptr<gfx::SurfaceTexture> AcquireSurfaceTexture(
- int primary_id,
- int secondary_id) OVERRIDE {
- base::AutoLock lock(surface_textures_lock_);
- scoped_ptr<SurfaceTextureInfo> info =
- surface_textures_.take_and_erase(SurfaceTextureMapKey(
- primary_id, static_cast<base::ProcessHandle>(secondary_id)));
- return info ? info->surface_texture : NULL;
- }
-
- int AddSurfaceTexture(gfx::SurfaceTexture* surface_texture,
- base::ProcessHandle process_handle) {
+ int AddSurfaceTexture(base::ProcessHandle process_handle) {
DCHECK(thread_checker_.CalledOnValidThread());
int surface_texture_id = next_surface_texture_id_++;
if (next_surface_texture_id_ == INT_MAX)
@@ -163,8 +151,7 @@ class SurfaceTextureTrackerImpl : public gfx::SurfaceTextureTracker {
base::AutoLock lock(surface_textures_lock_);
SurfaceTextureMapKey key(surface_texture_id, process_handle);
DCHECK(surface_textures_.find(key) == surface_textures_.end());
- surface_textures_.set(
- key, make_scoped_ptr(new SurfaceTextureInfo(surface_texture)));
+ surface_textures_[key].Reset();
return surface_texture_id;
}
@@ -187,27 +174,20 @@ class SurfaceTextureTrackerImpl : public gfx::SurfaceTextureTracker {
SurfaceTextureMapKey(surface_texture_id, process_handle));
return it == surface_textures_.end()
? NULL
- : it->second->surface.j_surface().obj();
+ : it->second.obj();
}
private:
- struct SurfaceTextureInfo {
- explicit SurfaceTextureInfo(gfx::SurfaceTexture* surface_texture)
- : surface_texture(surface_texture), surface(surface_texture) {}
-
- scoped_refptr<gfx::SurfaceTexture> surface_texture;
- gfx::ScopedJavaSurface surface;
- };
-
typedef std::pair<int, base::ProcessHandle> SurfaceTextureMapKey;
- typedef base::ScopedPtrHashMap<SurfaceTextureMapKey, SurfaceTextureInfo>
+ typedef std::map<SurfaceTextureMapKey,
+ base::android::ScopedJavaGlobalRef<jobject> >
SurfaceTextureMap;
SurfaceTextureMap surface_textures_;
mutable base::Lock surface_textures_lock_;
int next_surface_texture_id_;
base::ThreadChecker thread_checker_;
};
-base::LazyInstance<SurfaceTextureTrackerImpl> g_surface_texture_tracker =
+base::LazyInstance<SurfaceTextureManager> g_surface_texture_manager =
LAZY_INSTANCE_INITIALIZER;
static bool g_initialized = false;
@@ -231,9 +211,6 @@ Compositor* Compositor::Create(CompositorClient* client,
// static
void Compositor::Initialize() {
DCHECK(!CompositorImpl::IsInitialized());
- // SurfaceTextureTracker instance must be set before we create a GPU thread
- // that could be using it to initialize GLImage instances.
- gfx::SurfaceTextureTracker::InitInstance(g_surface_texture_tracker.Pointer());
g_initialized = true;
}
@@ -257,7 +234,7 @@ jobject CompositorImpl::GetSurface(int surface_id) {
jobject CompositorImpl::GetSurfaceTextureSurface(
int surface_texture_id,
base::ProcessHandle process_handle) {
- jobject jsurface = g_surface_texture_tracker.Pointer()->GetSurface(
+ jobject jsurface = g_surface_texture_manager.Pointer()->GetSurface(
surface_texture_id, process_handle);
LOG_IF(WARNING, !jsurface) << "No surface for surface texture id "
@@ -266,18 +243,36 @@ jobject CompositorImpl::GetSurfaceTextureSurface(
}
// static
-int CompositorImpl::AllocateSurfaceTexture(base::ProcessHandle process_handle) {
- const int kDummyTextureId = 0;
- scoped_refptr<gfx::SurfaceTexture> surface_texture =
- gfx::SurfaceTexture::Create(kDummyTextureId);
- return g_surface_texture_tracker.Pointer()->AddSurfaceTexture(
- surface_texture.get(), process_handle);
+void CompositorImpl::CreateSurfaceTexture(
+ base::ProcessHandle process_handle,
+ const CreateSurfaceTextureCallback& callback) {
+ int surface_texture_id =
+ g_surface_texture_manager.Pointer()->AddSurfaceTexture(process_handle);
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ BrowserGpuChannelHostFactory* factory =
+ BrowserGpuChannelHostFactory::instance();
+ factory->CreateSurfaceTexture(
+ surface_texture_id,
+ process_handle,
+ base::Bind(&CompositorImpl::OnSurfaceTextureCreated,
+ surface_texture_id,
+ process_handle,
+ callback));
}
// static
void CompositorImpl::DestroyAllSurfaceTextures(
base::ProcessHandle process_handle) {
- g_surface_texture_tracker.Pointer()->RemoveAllSurfaceTextures(process_handle);
+ g_surface_texture_manager.Pointer()->RemoveAllSurfaceTextures(process_handle);
+}
+
+// static
+void CompositorImpl::OnSurfaceTextureCreated(
+ int surface_texture_id,
+ base::ProcessHandle process_handle,
+ const CreateSurfaceTextureCallback& callback) {
+ // TODO(reveman): Get surface texture surface from GPU service.
+ NOTIMPLEMENTED();
}
CompositorImpl::CompositorImpl(CompositorClient* client,
« no previous file with comments | « content/browser/renderer_host/compositor_impl_android.h ('k') | content/browser/renderer_host/render_message_filter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698