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

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

Issue 2791723003: Update GpuSurfaceTracker to include Android surfaces. (Closed)
Patch Set: updated comment Created 3 years, 7 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
« no previous file with comments | « gpu/ipc/common/gpu_surface_tracker.h ('k') | ui/compositor/test/in_process_context_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #if defined(OS_ANDROID)
18 GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(gfx::AcceleratedWidget widget,
19 jobject j_surface)
20 : widget(widget) {
21 // TODO(liberato): It would be nice to assert |surface != nullptr|, but we
22 // can't. in_process_context_factory.cc (for tests) actually calls us without
23 // a Surface from java. Presumably, nobody uses it. crbug.com/712717 .
24 if (j_surface != nullptr)
25 surface = gl::ScopedJavaSurface::AcquireExternalSurface(j_surface);
26 }
27 #else // defined(OS_ANDROID)
28 GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(gfx::AcceleratedWidget widget)
29 : widget(widget) {}
30 #endif // !defined(OS_ANDROID)
31
32 GpuSurfaceTracker::SurfaceRecord::SurfaceRecord(SurfaceRecord&&) = default;
33
17 GpuSurfaceTracker::GpuSurfaceTracker() 34 GpuSurfaceTracker::GpuSurfaceTracker()
18 : next_surface_handle_(1) { 35 : next_surface_handle_(1) {
19 gpu::GpuSurfaceLookup::InitInstance(this); 36 gpu::GpuSurfaceLookup::InitInstance(this);
20 } 37 }
21 38
22 GpuSurfaceTracker::~GpuSurfaceTracker() { 39 GpuSurfaceTracker::~GpuSurfaceTracker() {
23 gpu::GpuSurfaceLookup::InitInstance(NULL); 40 gpu::GpuSurfaceLookup::InitInstance(NULL);
24 } 41 }
25 42
26 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { 43 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() {
27 return base::Singleton<GpuSurfaceTracker>::get(); 44 return base::Singleton<GpuSurfaceTracker>::get();
28 } 45 }
29 46
30 int GpuSurfaceTracker::AddSurfaceForNativeWidget( 47 int GpuSurfaceTracker::AddSurfaceForNativeWidget(SurfaceRecord record) {
31 gfx::AcceleratedWidget widget) {
32 base::AutoLock lock(surface_map_lock_); 48 base::AutoLock lock(surface_map_lock_);
33 gpu::SurfaceHandle surface_handle = next_surface_handle_++; 49 gpu::SurfaceHandle surface_handle = next_surface_handle_++;
34 surface_map_[surface_handle] = widget; 50 surface_map_.emplace(surface_handle, std::move(record));
35 return surface_handle; 51 return surface_handle;
36 } 52 }
37 53
38 bool GpuSurfaceTracker::IsValidSurfaceHandle( 54 bool GpuSurfaceTracker::IsValidSurfaceHandle(
39 gpu::SurfaceHandle surface_handle) const { 55 gpu::SurfaceHandle surface_handle) const {
40 base::AutoLock lock(surface_map_lock_); 56 base::AutoLock lock(surface_map_lock_);
41 return surface_map_.find(surface_handle) != surface_map_.end(); 57 return surface_map_.find(surface_handle) != surface_map_.end();
42 } 58 }
43 59
44 void GpuSurfaceTracker::RemoveSurface(gpu::SurfaceHandle surface_handle) { 60 void GpuSurfaceTracker::RemoveSurface(gpu::SurfaceHandle surface_handle) {
45 base::AutoLock lock(surface_map_lock_); 61 base::AutoLock lock(surface_map_lock_);
46 DCHECK(surface_map_.find(surface_handle) != surface_map_.end()); 62 DCHECK(surface_map_.find(surface_handle) != surface_map_.end());
47 surface_map_.erase(surface_handle); 63 surface_map_.erase(surface_handle);
48 } 64 }
49 65
50 gfx::AcceleratedWidget GpuSurfaceTracker::AcquireNativeWidget( 66 gfx::AcceleratedWidget GpuSurfaceTracker::AcquireNativeWidget(
51 gpu::SurfaceHandle surface_handle) { 67 gpu::SurfaceHandle surface_handle) {
52 base::AutoLock lock(surface_map_lock_); 68 base::AutoLock lock(surface_map_lock_);
53 SurfaceMap::iterator it = surface_map_.find(surface_handle); 69 SurfaceMap::iterator it = surface_map_.find(surface_handle);
54 if (it == surface_map_.end()) 70 if (it == surface_map_.end())
55 return gfx::kNullAcceleratedWidget; 71 return gfx::kNullAcceleratedWidget;
56 72
57 #if defined(OS_ANDROID) 73 #if defined(OS_ANDROID)
58 if (it->second != gfx::kNullAcceleratedWidget) 74 if (it->second.widget != gfx::kNullAcceleratedWidget)
59 ANativeWindow_acquire(it->second); 75 ANativeWindow_acquire(it->second.widget);
60 #endif // defined(OS_ANDROID) 76 #endif // defined(OS_ANDROID)
61 77
62 return it->second; 78 return it->second.widget;
63 } 79 }
64 80
65 #if defined(OS_ANDROID) 81 #if defined(OS_ANDROID)
66 void GpuSurfaceTracker::RegisterViewSurface( 82 gl::ScopedJavaSurface GpuSurfaceTracker::AcquireJavaSurface(
67 int surface_id, jobject j_surface) { 83 gpu::SurfaceHandle surface_handle) {
68 base::AutoLock lock(surface_view_map_lock_); 84 base::AutoLock lock(surface_map_lock_);
69 DCHECK(surface_view_map_.find(surface_id) == surface_view_map_.end()); 85 SurfaceMap::const_iterator it = surface_map_.find(surface_handle);
70 86 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(); 87 return gl::ScopedJavaSurface();
88 88
89 const gl::ScopedJavaSurface& j_surface = iter->second; 89 const gl::ScopedJavaSurface& j_surface = it->second.surface;
90 DCHECK(j_surface.IsValid()); 90 DCHECK(j_surface.IsValid());
91 return gl::ScopedJavaSurface::AcquireExternalSurface( 91 return gl::ScopedJavaSurface::AcquireExternalSurface(
92 j_surface.j_surface().obj()); 92 j_surface.j_surface().obj());
93 } 93 }
94 #endif 94 #endif
95 95
96 std::size_t GpuSurfaceTracker::GetSurfaceCount() { 96 std::size_t GpuSurfaceTracker::GetSurfaceCount() {
97 base::AutoLock lock(surface_map_lock_); 97 base::AutoLock lock(surface_map_lock_);
98 return surface_map_.size(); 98 return surface_map_.size();
99 } 99 }
100 100
101 } // namespace gpu 101 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/ipc/common/gpu_surface_tracker.h ('k') | ui/compositor/test/in_process_context_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698