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

Side by Side Diff: chrome/browser/tab_contents/thumbnail_generator.cc

Issue 3037006: Let PaintAtAck send an int tag instead of the TransportDIB handle. (Closed)
Patch Set: '' Created 10 years, 5 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/tab_contents/thumbnail_generator.h" 5 #include "chrome/browser/tab_contents/thumbnail_generator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/histogram.h" 10 #include "base/histogram.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 delete callback; 184 delete callback;
185 return; 185 return;
186 } 186 }
187 // Now, if the backing store didn't exist, we will still try and 187 // Now, if the backing store didn't exist, we will still try and
188 // render asynchronously. 188 // render asynchronously.
189 } 189 }
190 190
191 // We are going to render the thumbnail asynchronously now, so keep 191 // We are going to render the thumbnail asynchronously now, so keep
192 // this callback for later lookup when the rendering is done. 192 // this callback for later lookup when the rendering is done.
193 static int sequence_num = 0; 193 static int sequence_num = 0;
194 sequence_num++;
194 TransportDIB* thumbnail_dib = TransportDIB::Create( 195 TransportDIB* thumbnail_dib = TransportDIB::Create(
195 desired_size.width() * desired_size.height() * 4, sequence_num++); 196 desired_size.width() * desired_size.height() * 4, sequence_num);
197
196 linked_ptr<AsyncRequestInfo> request_info(new AsyncRequestInfo); 198 linked_ptr<AsyncRequestInfo> request_info(new AsyncRequestInfo);
197 request_info->callback.reset(callback); 199 request_info->callback.reset(callback);
198 request_info->thumbnail_dib.reset(thumbnail_dib); 200 request_info->thumbnail_dib.reset(thumbnail_dib);
199 request_info->renderer = renderer; 201 request_info->renderer = renderer;
200 ThumbnailCallbackMap::value_type new_value(thumbnail_dib->handle(), 202 ThumbnailCallbackMap::value_type new_value(sequence_num, request_info);
201 request_info);
202 std::pair<ThumbnailCallbackMap::iterator, bool> result = 203 std::pair<ThumbnailCallbackMap::iterator, bool> result =
203 callback_map_.insert(new_value); 204 callback_map_.insert(new_value);
204 if (!result.second) { 205 if (!result.second) {
205 NOTREACHED() << "Callback already registered?"; 206 NOTREACHED() << "Callback already registered?";
206 return; 207 return;
207 } 208 }
208 209
209 renderer->PaintAtSize(thumbnail_dib->handle(), page_size, desired_size); 210 renderer->PaintAtSize(
211 thumbnail_dib->handle(), sequence_num, page_size, desired_size);
210 } 212 }
211 213
212 SkBitmap ThumbnailGenerator::GetThumbnailForRenderer( 214 SkBitmap ThumbnailGenerator::GetThumbnailForRenderer(
213 RenderWidgetHost* renderer) const { 215 RenderWidgetHost* renderer) const {
214 WidgetThumbnail* wt = GetDataForHost(renderer); 216 WidgetThumbnail* wt = GetDataForHost(renderer);
215 217
216 BackingStore* backing_store = renderer->GetBackingStore(false); 218 BackingStore* backing_store = renderer->GetBackingStore(false);
217 if (!backing_store) { 219 if (!backing_store) {
218 // When we have no backing store, there's no choice in what to use. We 220 // When we have no backing store, there's no choice in what to use. We
219 // have to return either the existing thumbnail or the empty one if there 221 // have to return either the existing thumbnail or the empty one if there
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 return; // TODO(brettw) schedule thumbnail generation for this renderer in 285 return; // TODO(brettw) schedule thumbnail generation for this renderer in
284 // case we don't get a paint for it after the time slop, but it's 286 // case we don't get a paint for it after the time slop, but it's
285 // still visible. 287 // still visible.
286 288
287 // Clear the thumbnail, since it's now out of date. 289 // Clear the thumbnail, since it's now out of date.
288 wt->thumbnail = SkBitmap(); 290 wt->thumbnail = SkBitmap();
289 } 291 }
290 292
291 void ThumbnailGenerator::WidgetDidReceivePaintAtSizeAck( 293 void ThumbnailGenerator::WidgetDidReceivePaintAtSizeAck(
292 RenderWidgetHost* widget, 294 RenderWidgetHost* widget,
293 const TransportDIB::Handle& dib_handle, 295 int sequence_num,
294 const gfx::Size& size) { 296 const gfx::Size& size) {
295 // Lookup the callback, run it, and erase it. 297 // Lookup the callback, run it, and erase it.
296 ThumbnailCallbackMap::iterator item = callback_map_.find(dib_handle); 298 ThumbnailCallbackMap::iterator item = callback_map_.find(sequence_num);
297 if (item != callback_map_.end()) { 299 if (item != callback_map_.end()) {
298 TransportDIB* dib = item->second->thumbnail_dib.get(); 300 TransportDIB* dib = item->second->thumbnail_dib.get();
299 DCHECK(dib); 301 DCHECK(dib);
300 if (!dib) { 302 if (!dib) {
301 return; 303 return;
302 } 304 }
303 305
304 // Create an SkBitmap from the DIB. 306 // Create an SkBitmap from the DIB.
305 SkBitmap non_owned_bitmap; 307 SkBitmap non_owned_bitmap;
306 SkBitmap result; 308 SkBitmap result;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 &ThumbnailGenerator::ShownDelayHandler); 445 &ThumbnailGenerator::ShownDelayHandler);
444 } 446 }
445 } 447 }
446 448
447 void ThumbnailGenerator::EraseHostFromShownList(RenderWidgetHost* widget) { 449 void ThumbnailGenerator::EraseHostFromShownList(RenderWidgetHost* widget) {
448 std::vector<RenderWidgetHost*>::iterator found = 450 std::vector<RenderWidgetHost*>::iterator found =
449 std::find(shown_hosts_.begin(), shown_hosts_.end(), widget); 451 std::find(shown_hosts_.begin(), shown_hosts_.end(), widget);
450 if (found != shown_hosts_.end()) 452 if (found != shown_hosts_.end())
451 shown_hosts_.erase(found); 453 shown_hosts_.erase(found);
452 } 454 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698