Changeset 95658 in webkit
- Timestamp:
- Sep 21, 2011 12:11:40 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r95655 r95658 1 2011-09-21 Stephen White <senorblanco@chromium.org> 2 3 [chromium] Optimize ImageBuffer constructor when accelerated 4 https://bugs.webkit.org/show_bug.cgi?id=68501 5 6 If the accelerated rendering mode is passed in to ImageBuffer, instead 7 of creating a bitmap PlatformCanvas and subsequently replacing its 8 device with an SkGpuDevice, create an SkCanvas and SkGpuDevice first, 9 and fall back to raster creation only failure. This saves on system 10 RAM for the backing store (and possibly GDI resources). 11 12 Reviewed by James Robinson. 13 14 Covered by existing tests. 15 16 * platform/graphics/gpu/SharedGraphicsContext3D.cpp: 17 (WebCore::SharedGraphicsContext3D::get): 18 * platform/graphics/gpu/SharedGraphicsContext3D.h: 19 Rename "SharedGraphicsContext3D::create()" to "get()" to more 20 accurately reflect its function. 21 * platform/graphics/skia/ImageBufferSkia.cpp: 22 (WebCore::createAcceleratedCanvas): 23 Refactor creation of accelerated ImageBuffer. 24 (WebCore::ImageBuffer::ImageBuffer): 25 Attempt creation of accelerated ImageBuffer first, and only fall back 26 to bitmap-backed canvas creation if it fails. 27 1 28 2011-09-21 Dan Bernstein <mitz@apple.com> 2 29 -
trunk/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.cpp
r93625 r95658 31 31 namespace WebCore { 32 32 33 GraphicsContext3D* SharedGraphicsContext3D:: create(HostWindow* window)33 GraphicsContext3D* SharedGraphicsContext3D::get() 34 34 { 35 35 GraphicsContext3D::Attributes attributes; … … 39 39 attributes.canRecoverFromContextLoss = false; // Canvas contexts can not handle lost contexts. 40 40 attributes.shareResources = true; 41 static RefPtr<GraphicsContext3D> context = GraphicsContext3D::create(attributes, window);41 static RefPtr<GraphicsContext3D> context = GraphicsContext3D::create(attributes, 0); 42 42 return context.get(); 43 43 } -
trunk/Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h
r93013 r95658 35 35 class SharedGraphicsContext3D { 36 36 public: 37 static GraphicsContext3D* create(HostWindow*);37 static GraphicsContext3D* get(); 38 38 }; 39 39 -
trunk/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
r95192 r95658 65 65 } 66 66 67 static SkCanvas* createAcceleratedCanvas(const IntSize& size, ImageBufferData* data) 68 { 69 GraphicsContext3D* context3D = SharedGraphicsContext3D::get(); 70 if (!context3D) 71 return 0; 72 GrContext* gr = context3D->grContext(); 73 if (!gr) 74 return 0; 75 gr->resetContext(); 76 GrTextureDesc desc; 77 desc.fFlags = kRenderTarget_GrTextureFlagBit; 78 desc.fAALevel = kNone_GrAALevel; 79 desc.fWidth = size.width(); 80 desc.fHeight = size.height(); 81 desc.fFormat = kRGBA_8888_GrPixelConfig; 82 SkAutoTUnref<GrTexture> texture(gr->createUncachedTexture(desc, 0, 0)); 83 if (!texture.get()) 84 return 0; 85 SkCanvas* canvas = new SkCanvas(); 86 canvas->setDevice(new SkGpuDevice(gr, texture.get()))->unref(); 87 data->m_platformContext.setGraphicsContext3D(context3D); 88 #if USE(ACCELERATED_COMPOSITING) 89 data->m_platformLayer = Canvas2DLayerChromium::create(context3D); 90 data->m_platformLayer->setTextureId(texture.get()->getTextureHandle()); 91 #endif 92 return canvas; 93 } 94 67 95 ImageBuffer::ImageBuffer(const IntSize& size, ColorSpace, RenderingMode renderingMode, bool& success) 68 96 : m_data(size) 69 97 , m_size(size) 70 98 { 71 OwnPtr<SkCanvas> canvas = adoptPtr(skia::TryCreateBitmapCanvas(size.width(), size.height(), false)); 99 OwnPtr<SkCanvas> canvas; 100 101 if (renderingMode == Accelerated) 102 canvas = adoptPtr(createAcceleratedCanvas(size, &m_data)); 103 104 if (!canvas) 105 canvas = adoptPtr(skia::TryCreateBitmapCanvas(size.width(), size.height(), false)); 106 72 107 if (!canvas) { 73 108 success = false; … … 84 119 // color. Can we have another way to manage this? 85 120 m_data.m_canvas->drawARGB(0, 0, 0, 0, SkXfermode::kClear_Mode); 86 if (renderingMode == Accelerated) {87 GraphicsContext3D* context3D = SharedGraphicsContext3D::create(0);88 if (context3D) {89 GrContext* gr = context3D->grContext();90 if (gr) {91 gr->resetContext();92 GrTextureDesc desc;93 desc.fFlags = kRenderTarget_GrTextureFlagBit;94 desc.fAALevel = kNone_GrAALevel;95 desc.fWidth = size.width();96 desc.fHeight = size.height();97 desc.fFormat = kRGBA_8888_GrPixelConfig;98 SkAutoTUnref<GrTexture> texture(gr->createUncachedTexture(desc, 0, 0));99 if (texture.get()) {100 m_data.m_canvas->setDevice(new SkGpuDevice(gr, texture.get()))->unref();101 m_context->platformContext()->setGraphicsContext3D(context3D);102 #if USE(ACCELERATED_COMPOSITING)103 m_data.m_platformLayer = Canvas2DLayerChromium::create(context3D);104 m_data.m_platformLayer->setTextureId(texture.get()->getTextureHandle());105 #endif106 }107 }108 }109 }110 121 111 122 success = true;
Note: See TracChangeset
for help on using the changeset viewer.