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

Side by Side Diff: gpu/ipc/common/gpu_surface_tracker.cc

Issue 2791723003: Update GpuSurfaceTracker to include Android surfaces. (Closed)
Patch Set: cleanup, fixed nullptr surface Created 3 years, 8 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 unified diff | Download patch
OLDNEW
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 "gpu/ipc/common/gpu_surface_tracker.h" 5 #include "gpu/ipc/common/gpu_surface_tracker.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 9
10 #if defined(OS_ANDROID) 10 #if defined(OS_ANDROID)
11 #include <android/native_window_jni.h> 11 #include <android/native_window_jni.h>
12 #include "ui/gl/android/scoped_java_surface.h" 12 #include "ui/gl/android/scoped_java_surface.h"
13 #endif // defined(OS_ANDROID) 13 #endif // defined(OS_ANDROID)
14 14
15 namespace gpu { 15 namespace gpu {
16 16
17 GpuSurfaceTracker::Record::Record(gfx::AcceleratedWidget widget
18 #if defined(OS_ANDROID)
19 ,
20 jobject j_surface
21 #endif
22 )
23 : widget(widget) {
24 #if defined(OS_ANDROID)
25 // TODO(liberato): It would be nice to assert |surface != nullptr|, but we
26 // can't. in_process_context_factory.cc (for tests) actually calls us without
27 // a Surface from java. Presumably, nobody uses it.
28 if (j_surface != nullptr)
29 surface = gl::ScopedJavaSurface::AcquireExternalSurface(j_surface);
30 #endif
31 }
32
33 GpuSurfaceTracker::Record::Record(Record&&) = default;
34
17 GpuSurfaceTracker::GpuSurfaceTracker() 35 GpuSurfaceTracker::GpuSurfaceTracker()
18 : next_surface_handle_(1) { 36 : next_surface_handle_(1) {
19 gpu::GpuSurfaceLookup::InitInstance(this); 37 gpu::GpuSurfaceLookup::InitInstance(this);
20 } 38 }
21 39
22 GpuSurfaceTracker::~GpuSurfaceTracker() { 40 GpuSurfaceTracker::~GpuSurfaceTracker() {
23 gpu::GpuSurfaceLookup::InitInstance(NULL); 41 gpu::GpuSurfaceLookup::InitInstance(NULL);
24 } 42 }
25 43
26 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { 44 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() {
27 return base::Singleton<GpuSurfaceTracker>::get(); 45 return base::Singleton<GpuSurfaceTracker>::get();
28 } 46 }
29 47
30 int GpuSurfaceTracker::AddSurfaceForNativeWidget( 48 int GpuSurfaceTracker::AddSurfaceForNativeWidget(Record record) {
31 gfx::AcceleratedWidget widget) {
32 base::AutoLock lock(surface_map_lock_); 49 base::AutoLock lock(surface_map_lock_);
33 gpu::SurfaceHandle surface_handle = next_surface_handle_++; 50 gpu::SurfaceHandle surface_handle = next_surface_handle_++;
34 surface_map_[surface_handle] = widget; 51 surface_map_.insert(
52 SurfaceMap::value_type(surface_handle, std::move(record)));
35 return surface_handle; 53 return surface_handle;
36 } 54 }
37 55
38 bool GpuSurfaceTracker::IsValidSurfaceHandle( 56 bool GpuSurfaceTracker::IsValidSurfaceHandle(
39 gpu::SurfaceHandle surface_handle) const { 57 gpu::SurfaceHandle surface_handle) const {
40 base::AutoLock lock(surface_map_lock_); 58 base::AutoLock lock(surface_map_lock_);
41 return surface_map_.find(surface_handle) != surface_map_.end(); 59 return surface_map_.find(surface_handle) != surface_map_.end();
42 } 60 }
43 61
44 void GpuSurfaceTracker::RemoveSurface(gpu::SurfaceHandle surface_handle) { 62 void GpuSurfaceTracker::RemoveSurface(gpu::SurfaceHandle surface_handle) {
45 base::AutoLock lock(surface_map_lock_); 63 base::AutoLock lock(surface_map_lock_);
46 DCHECK(surface_map_.find(surface_handle) != surface_map_.end()); 64 DCHECK(surface_map_.find(surface_handle) != surface_map_.end());
47 surface_map_.erase(surface_handle); 65 surface_map_.erase(surface_handle);
48 } 66 }
49 67
50 gfx::AcceleratedWidget GpuSurfaceTracker::AcquireNativeWidget( 68 gfx::AcceleratedWidget GpuSurfaceTracker::AcquireNativeWidget(
51 gpu::SurfaceHandle surface_handle) { 69 gpu::SurfaceHandle surface_handle) {
52 base::AutoLock lock(surface_map_lock_); 70 base::AutoLock lock(surface_map_lock_);
53 SurfaceMap::iterator it = surface_map_.find(surface_handle); 71 SurfaceMap::iterator it = surface_map_.find(surface_handle);
54 if (it == surface_map_.end()) 72 if (it == surface_map_.end())
55 return gfx::kNullAcceleratedWidget; 73 return gfx::kNullAcceleratedWidget;
56 74
57 #if defined(OS_ANDROID) 75 #if defined(OS_ANDROID)
58 if (it->second != gfx::kNullAcceleratedWidget) 76 if (it->second.widget != gfx::kNullAcceleratedWidget)
59 ANativeWindow_acquire(it->second); 77 ANativeWindow_acquire(it->second.widget);
60 #endif // defined(OS_ANDROID) 78 #endif // defined(OS_ANDROID)
61 79
62 return it->second; 80 return it->second.widget;
63 } 81 }
64 82
65 #if defined(OS_ANDROID) 83 #if defined(OS_ANDROID)
66 void GpuSurfaceTracker::RegisterViewSurface( 84 gl::ScopedJavaSurface GpuSurfaceTracker::AcquireJavaSurface(
67 int surface_id, jobject j_surface) { 85 gpu::SurfaceHandle surface_handle) {
68 base::AutoLock lock(surface_view_map_lock_); 86 base::AutoLock lock(surface_map_lock_);
69 DCHECK(surface_view_map_.find(surface_id) == surface_view_map_.end()); 87 SurfaceMap::const_iterator it = surface_map_.find(surface_handle);
70 88 if (it == surface_map_.end())
71 surface_view_map_[surface_id] =
72 gl::ScopedJavaSurface::AcquireExternalSurface(j_surface);
73 CHECK(surface_view_map_[surface_id].IsValid());
74 }
75
76 void GpuSurfaceTracker::UnregisterViewSurface(int surface_id)
77 {
78 base::AutoLock lock(surface_view_map_lock_);
79 DCHECK(surface_view_map_.find(surface_id) != surface_view_map_.end());
80 surface_view_map_.erase(surface_id);
81 }
82
83 gl::ScopedJavaSurface GpuSurfaceTracker::AcquireJavaSurface(int surface_id) {
84 base::AutoLock lock(surface_view_map_lock_);
85 SurfaceViewMap::const_iterator iter = surface_view_map_.find(surface_id);
86 if (iter == surface_view_map_.end())
87 return gl::ScopedJavaSurface(); 89 return gl::ScopedJavaSurface();
88 90
89 const gl::ScopedJavaSurface& j_surface = iter->second; 91 const gl::ScopedJavaSurface& j_surface = it->second.surface;
90 DCHECK(j_surface.IsValid()); 92 DCHECK(j_surface.IsValid());
91 return gl::ScopedJavaSurface::AcquireExternalSurface( 93 return gl::ScopedJavaSurface::AcquireExternalSurface(
92 j_surface.j_surface().obj()); 94 j_surface.j_surface().obj());
93 } 95 }
94 #endif 96 #endif
95 97
96 std::size_t GpuSurfaceTracker::GetSurfaceCount() { 98 std::size_t GpuSurfaceTracker::GetSurfaceCount() {
97 base::AutoLock lock(surface_map_lock_); 99 base::AutoLock lock(surface_map_lock_);
98 return surface_map_.size(); 100 return surface_map_.size();
99 } 101 }
100 102
101 } // namespace gpu 103 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698