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

Side by Side Diff: Source/core/platform/graphics/ImageBuffer.cpp

Issue 22929012: Change Canvas2DLayerBridge to stay alive until last mailbox is returned. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: applied senorblanco feedback Created 7 years, 3 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 /* 1 /*
2 * Copyright (c) 2008, Google Inc. All rights reserved. 2 * Copyright (c) 2008, Google Inc. All rights reserved.
3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are 7 * modification, are permitted provided that the following conditions are
8 * met: 8 * met:
9 * 9 *
10 * * Redistributions of source code must retain the above copyright 10 * * Redistributions of source code must retain the above copyright
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "third_party/skia/include/gpu/GrContext.h" 55 #include "third_party/skia/include/gpu/GrContext.h"
56 #include "third_party/skia/include/gpu/SkGpuDevice.h" 56 #include "third_party/skia/include/gpu/SkGpuDevice.h"
57 #include "wtf/MathExtras.h" 57 #include "wtf/MathExtras.h"
58 #include "wtf/text/Base64.h" 58 #include "wtf/text/Base64.h"
59 #include "wtf/text/WTFString.h" 59 #include "wtf/text/WTFString.h"
60 60
61 using namespace std; 61 using namespace std;
62 62
63 namespace WebCore { 63 namespace WebCore {
64 64
65 static SkCanvas* createAcceleratedCanvas(const IntSize& size, OwnPtr<Canvas2DLay erBridge>* outLayerBridge, OpacityMode opacityMode) 65 static SkCanvas* createAcceleratedCanvas(const IntSize& size, Canvas2DLayerBridg ePtr* outLayerBridge, OpacityMode opacityMode)
66 { 66 {
67 RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get(); 67 RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get();
68 if (!context3D) 68 if (!context3D)
69 return 0; 69 return 0;
70 Canvas2DLayerBridge::OpacityMode bridgeOpacityMode = opacityMode == Opaque ? Canvas2DLayerBridge::Opaque : Canvas2DLayerBridge::NonOpaque; 70 Canvas2DLayerBridge::OpacityMode bridgeOpacityMode = opacityMode == Opaque ? Canvas2DLayerBridge::Opaque : Canvas2DLayerBridge::NonOpaque;
71 *outLayerBridge = Canvas2DLayerBridge::create(context3D.release(), size, bri dgeOpacityMode); 71 *outLayerBridge = Canvas2DLayerBridge::create(context3D.release(), size, bri dgeOpacityMode);
72 // If canvas buffer allocation failed, debug build will have asserted 72 // If canvas buffer allocation failed, debug build will have asserted
73 // For release builds, we must verify whether the device has a render target 73 // For release builds, we must verify whether the device has a render target
74 return (*outLayerBridge) ? (*outLayerBridge)->getCanvas() : 0; 74 return (*outLayerBridge) ? (*outLayerBridge)->getCanvas() : 0;
75 } 75 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 // We're using context acquisition as a signal that someone is about to render into our buffer and we need 168 // We're using context acquisition as a signal that someone is about to render into our buffer and we need
169 // to be ready. This isn't logically const-correct, hence the cast. 169 // to be ready. This isn't logically const-correct, hence the cast.
170 const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->contextAcquired() ; 170 const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->contextAcquired() ;
171 } 171 }
172 return m_context.get(); 172 return m_context.get();
173 } 173 }
174 174
175 175
176 bool ImageBuffer::isValid() const 176 bool ImageBuffer::isValid() const
177 { 177 {
178 if (m_layerBridge.get()) 178 if (m_layerBridge)
179 return const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->isValid(); 179 return const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->isValid();
180 return true; 180 return true;
181 } 181 }
182 182
183 static SkBitmap deepSkBitmapCopy(const SkBitmap& bitmap) 183 static SkBitmap deepSkBitmapCopy(const SkBitmap& bitmap)
184 { 184 {
185 SkBitmap tmp; 185 SkBitmap tmp;
186 if (!bitmap.deepCopyTo(&tmp, bitmap.config())) 186 if (!bitmap.deepCopyTo(&tmp, bitmap.config()))
187 bitmap.copyTo(&tmp, bitmap.config()); 187 bitmap.copyTo(&tmp, bitmap.config());
188 188
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 if (!encodeImage(imageData, mimeType, quality, &encodedImage)) 490 if (!encodeImage(imageData, mimeType, quality, &encodedImage))
491 return "data:,"; 491 return "data:,";
492 492
493 Vector<char> base64Data; 493 Vector<char> base64Data;
494 base64Encode(encodedImage, base64Data); 494 base64Encode(encodedImage, base64Data);
495 495
496 return "data:" + mimeType + ";base64," + base64Data; 496 return "data:" + mimeType + ";base64," + base64Data;
497 } 497 }
498 498
499 } // namespace WebCore 499 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698