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

Side by Side Diff: chrome/renderer/render_process.cc

Issue 126101: Adds kind-of-live thumbnail generation for a potential tab switcher. (Closed)
Patch Set: For Checking hopefully Created 11 years, 6 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 | « chrome/renderer/DEPS ('k') | chrome/test/unit/unittests.vcproj » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <objidl.h> 9 #include <objidl.h>
10 #include <mlang.h> 10 #include <mlang.h>
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 return command_line.HasSwitch(switches::kInProcessPlugins); 129 return command_line.HasSwitch(switches::kInProcessPlugins);
130 #else 130 #else
131 return command_line.HasSwitch(switches::kInProcessPlugins) || 131 return command_line.HasSwitch(switches::kInProcessPlugins) ||
132 command_line.HasSwitch(switches::kSingleProcess); 132 command_line.HasSwitch(switches::kSingleProcess);
133 #endif 133 #endif
134 } 134 }
135 135
136 // ----------------------------------------------------------------------------- 136 // -----------------------------------------------------------------------------
137 // Platform specific code for dealing with bitmap transport... 137 // Platform specific code for dealing with bitmap transport...
138 138
139 // -----------------------------------------------------------------------------
140 // Create a platform canvas object which renders into the given transport
141 // memory.
142 // -----------------------------------------------------------------------------
143 static skia::PlatformCanvas* CanvasFromTransportDIB(
144 TransportDIB* dib, const gfx::Rect& rect) {
145 #if defined(OS_WIN)
146 return new skia::PlatformCanvas(rect.width(), rect.height(), true,
147 dib->handle());
148 #elif defined(OS_LINUX) || defined(OS_MACOSX)
149 return new skia::PlatformCanvas(rect.width(), rect.height(), true,
150 reinterpret_cast<uint8_t*>(dib->memory()));
151 #endif
152 }
153
154 TransportDIB* RenderProcess::CreateTransportDIB(size_t size) { 139 TransportDIB* RenderProcess::CreateTransportDIB(size_t size) {
155 #if defined(OS_WIN) || defined(OS_LINUX) 140 #if defined(OS_WIN) || defined(OS_LINUX)
156 // Windows and Linux create transport DIBs inside the renderer 141 // Windows and Linux create transport DIBs inside the renderer
157 return TransportDIB::Create(size, sequence_number_++); 142 return TransportDIB::Create(size, sequence_number_++);
158 #elif defined(OS_MACOSX) // defined(OS_WIN) || defined(OS_LINUX) 143 #elif defined(OS_MACOSX) // defined(OS_WIN) || defined(OS_LINUX)
159 // Mac creates transport DIBs in the browser, so we need to do a sync IPC to 144 // Mac creates transport DIBs in the browser, so we need to do a sync IPC to
160 // get one. 145 // get one.
161 TransportDIB::Handle handle; 146 TransportDIB::Handle handle;
162 IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(size, &handle); 147 IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(size, &handle);
163 if (!child_thread()->Send(msg)) 148 if (!child_thread()->Send(msg))
(...skipping 25 matching lines...) Expand all
189 TransportDIB** memory, const gfx::Rect& rect) { 174 TransportDIB** memory, const gfx::Rect& rect) {
190 const size_t stride = skia::PlatformCanvas::StrideForWidth(rect.width()); 175 const size_t stride = skia::PlatformCanvas::StrideForWidth(rect.width());
191 const size_t size = stride * rect.height(); 176 const size_t size = stride * rect.height();
192 177
193 if (!GetTransportDIBFromCache(memory, size)) { 178 if (!GetTransportDIBFromCache(memory, size)) {
194 *memory = CreateTransportDIB(size); 179 *memory = CreateTransportDIB(size);
195 if (!*memory) 180 if (!*memory)
196 return false; 181 return false;
197 } 182 }
198 183
199 return CanvasFromTransportDIB(*memory, rect); 184 return (*memory)->GetPlatformCanvas(rect.width(), rect.height());
200 } 185 }
201 186
202 void RenderProcess::ReleaseTransportDIB(TransportDIB* mem) { 187 void RenderProcess::ReleaseTransportDIB(TransportDIB* mem) {
203 if (PutSharedMemInCache(mem)) { 188 if (PutSharedMemInCache(mem)) {
204 shared_mem_cache_cleaner_.Reset(); 189 shared_mem_cache_cleaner_.Reset();
205 return; 190 return;
206 } 191 }
207 192
208 FreeTransportDIB(mem); 193 FreeTransportDIB(mem);
209 } 194 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 } 246 }
262 247
263 void RenderProcess::ClearTransportDIBCache() { 248 void RenderProcess::ClearTransportDIBCache() {
264 for (size_t i = 0; i < arraysize(shared_mem_cache_); ++i) { 249 for (size_t i = 0; i < arraysize(shared_mem_cache_); ++i) {
265 if (shared_mem_cache_[i]) { 250 if (shared_mem_cache_[i]) {
266 FreeTransportDIB(shared_mem_cache_[i]); 251 FreeTransportDIB(shared_mem_cache_[i]);
267 shared_mem_cache_[i] = NULL; 252 shared_mem_cache_[i] = NULL;
268 } 253 }
269 } 254 }
270 } 255 }
OLDNEW
« no previous file with comments | « chrome/renderer/DEPS ('k') | chrome/test/unit/unittests.vcproj » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698