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

Side by Side Diff: content/browser/gpu/gpu_surface_tracker.cc

Issue 9582003: Support browser side thumbnailing for GPU composited pages on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 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 unified diff | Download patch | Annotate | Revision Log
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 "content/browser/gpu/gpu_surface_tracker.h" 5 #include "content/browser/gpu/gpu_surface_tracker.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include "content/browser/gpu/gpu_surface_reader_win.h"
10 #include "ui/gfx/surface/accelerated_surface_win.h" 11 #include "ui/gfx/surface/accelerated_surface_win.h"
11 #endif 12 #endif
12 13
13 GpuSurfaceTracker::GpuSurfaceTracker() 14 GpuSurfaceTracker::GpuSurfaceTracker()
14 : next_surface_id_(1) { 15 : next_surface_id_(1) {
16 #if defined(OS_WIN)
17 reader_.reset(new GpuSurfaceReader);
apatrick_chromium 2012/03/07 20:39:37 And if CopySurface was a free function, this would
mazda 2012/03/08 13:14:28 Now I moved the code in CopySurface to RenderWidge
18 #endif
15 } 19 }
16 20
17 GpuSurfaceTracker::~GpuSurfaceTracker() { 21 GpuSurfaceTracker::~GpuSurfaceTracker() {
18 } 22 }
19 23
20 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() { 24 GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() {
21 return Singleton<GpuSurfaceTracker>::get(); 25 return Singleton<GpuSurfaceTracker>::get();
22 } 26 }
23 27
24 int GpuSurfaceTracker::AddSurfaceForRenderer(int renderer_id, 28 int GpuSurfaceTracker::AddSurfaceForRenderer(int renderer_id,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 SurfaceInfo& info = surface_map_[surface_id]; 87 SurfaceInfo& info = surface_map_[surface_id];
84 info.handle = handle; 88 info.handle = handle;
85 } 89 }
86 90
87 gfx::GLSurfaceHandle GpuSurfaceTracker::GetSurfaceHandle(int surface_id) { 91 gfx::GLSurfaceHandle GpuSurfaceTracker::GetSurfaceHandle(int surface_id) {
88 base::AutoLock lock(lock_); 92 base::AutoLock lock(lock_);
89 DCHECK(surface_map_.find(surface_id) != surface_map_.end()); 93 DCHECK(surface_map_.find(surface_id) != surface_map_.end());
90 return surface_map_[surface_id].handle; 94 return surface_map_[surface_id].handle;
91 } 95 }
92 96
97 bool GpuSurfaceTracker::CopySurface(int surface_id,
98 const gfx::Size& size,
99 std::vector<unsigned char>* out) {
100 base::AutoLock lock(lock_);
101 #if defined(OS_WIN)
piman 2012/03/07 21:22:27 && !defined(USE_AURA)
mazda 2012/03/08 13:14:28 Now I moved the code in CopySurface to RenderWidge
102 SurfaceMap::const_iterator itr = surface_map_.find(surface_id);
103 if (itr == surface_map_.end())
104 return false;
105 return reader_->CopySurface(itr->second, size, out);
106 #else
107 // TOOD(mazda): Implement this on other platforms.
108 NOTIMPLEMENTED();
109 return false;
110 #endif
111 }
112
93 #if defined(OS_WIN) && !defined(USE_AURA) 113 #if defined(OS_WIN) && !defined(USE_AURA)
94 114
95 void GpuSurfaceTracker::AsyncPresentAndAcknowledge( 115 void GpuSurfaceTracker::AsyncPresentAndAcknowledge(
96 int surface_id, 116 int surface_id,
97 const gfx::Size& size, 117 const gfx::Size& size,
98 int64 surface_handle, 118 int64 surface_handle,
99 const base::Closure& completion_task) { 119 const base::Closure& completion_task) {
100 base::AutoLock lock(lock_); 120 base::AutoLock lock(lock_);
101 121
102 SurfaceMap::iterator it = surface_map_.find(surface_id); 122 SurfaceMap::iterator it = surface_map_.find(surface_id);
103 if (it == surface_map_.end() || !it->second.handle.accelerated_surface) { 123 if (it == surface_map_.end() || !it->second.handle.accelerated_surface) {
104 completion_task.Run(); 124 completion_task.Run();
105 return; 125 return;
106 } 126 }
107 127
108 it->second.handle.accelerated_surface->AsyncPresentAndAcknowledge( 128 it->second.handle.accelerated_surface->AsyncPresentAndAcknowledge(
109 it->second.handle.handle, 129 it->second.handle.handle,
110 size, 130 size,
111 surface_handle, 131 surface_handle,
112 completion_task); 132 completion_task);
113 } 133 }
114 134
115 #endif // OS_WIN 135 #endif // OS_WIN
116
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698