Index: content/browser/renderer_host/backing_store_mac.mm |
diff --git a/content/browser/renderer_host/backing_store_mac.mm b/content/browser/renderer_host/backing_store_mac.mm |
index 326e0d42657df443b33a8e914760645b0ac22d80..ebc0c0d8aafcfb9acba0ede7acf34c322b7b58a2 100644 |
--- a/content/browser/renderer_host/backing_store_mac.mm |
+++ b/content/browser/renderer_host/backing_store_mac.mm |
@@ -41,6 +41,28 @@ BackingStoreMac::BackingStoreMac(content::RenderWidgetHost* widget, |
BackingStoreMac::~BackingStoreMac() { |
} |
+void BackingStoreMac::ScaleFactorChanged(float device_scale_factor) { |
+ if (device_scale_factor == device_scale_factor_) |
+ return; |
+ |
+ device_scale_factor_ = device_scale_factor; |
+ |
+ base::mac::ScopedCFTypeRef<CGLayerRef> new_layer(CreateCGLayer()); |
+ // If we have a layer, copy the old contents. A pixelated flash is better |
+ // than a white flash. |
+ if (new_layer && cg_layer_) { |
+ CGContextRef layer = CGLayerGetContext(new_layer); |
+ CGContextDrawLayerAtPoint(layer, CGPointMake(0, 0), cg_layer_); |
+ } |
+ |
+ cg_layer_.swap(new_layer); |
+ if (!cg_layer_) { |
+ // The view isn't in a window yet. Use a CGBitmapContext for now. |
+ cg_bitmap_.reset(CreateCGBitmapContext()); |
+ CGContextScaleCTM(cg_bitmap_, device_scale_factor_, device_scale_factor_); |
+ } |
+} |
+ |
size_t BackingStoreMac::MemorySize() { |
return size().Scale(device_scale_factor_).GetArea() * 4; |
} |