10a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk/* 20a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk * Copyright 2015 Google Inc. 30a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk * 40a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk * Use of this source code is governed by a BSD-style license that can be 50a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk * found in the LICENSE file. 60a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk */ 70a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 80a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk#include "GrGLTextureRenderTarget.h" 90a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 100a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk#include "SkTraceMemoryDump.h" 110a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 120a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk// GrGLTextureRenderTarget must dump both of its superclasses. 130a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrkvoid GrGLTextureRenderTarget::dumpMemoryStatistics( 140a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk SkTraceMemoryDump* traceMemoryDump) const { 150a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk GrGLRenderTarget::dumpMemoryStatistics(traceMemoryDump); 160a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 170a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk // Also dump the GrGLTexture's memory. Due to this resource having both a 180a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk // texture and a 190a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk // renderbuffer component, dump as skia/gpu_resources/resource_#/texture 200a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk SkString dumpName("skia/gpu_resources/resource_"); 21294870ff119b89fc902773643b054f14e5d1f554Robert Phillips dumpName.appendU32(this->uniqueID().asUInt()); 220a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk dumpName.append("/texture"); 230a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 240a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk // Use the texture's gpuMemorySize, not our own, which includes the 250a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk // renderbuffer as well. 260a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk size_t size = GrGLTexture::gpuMemorySize(); 270a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 280a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk traceMemoryDump->dumpNumericValue(dumpName.c_str(), "size", "bytes", size); 290a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 300a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk if (this->isPurgeable()) { 310a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk traceMemoryDump->dumpNumericValue(dumpName.c_str(), "purgeable_size", 320a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk "bytes", size); 330a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk } 340a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk 350a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk SkString texture_id; 360a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk texture_id.appendU32(this->textureID()); 370a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk traceMemoryDump->setMemoryBacking(dumpName.c_str(), "gl_texture", 380a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk texture_id.c_str()); 390a5fa484fd58d27088f8696bdc11c8cc8f2b4866ericrk} 402e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen 412e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunenbool GrGLTextureRenderTarget::canAttemptStencilAttachment() const { 422e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen // The RT FBO of GrGLTextureRenderTarget is never created from a 432e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen // wrapped FBO. 442e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen return true; 452e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen} 462e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen 476bd5284415bd983b0628c4941dff5def40018f5abungemansk_sp<GrGLTextureRenderTarget> GrGLTextureRenderTarget::MakeWrapped( 486bd5284415bd983b0628c4941dff5def40018f5abungeman GrGLGpu* gpu, const GrSurfaceDesc& desc, 496bd5284415bd983b0628c4941dff5def40018f5abungeman const GrGLTexture::IDDesc& texIDDesc, const GrGLRenderTarget::IDDesc& rtIDDesc) 506bd5284415bd983b0628c4941dff5def40018f5abungeman{ 516bd5284415bd983b0628c4941dff5def40018f5abungeman return sk_sp<GrGLTextureRenderTarget>( 52d6214d4f4664ce47861dc690b0ddbea3b7a07855Robert Phillips new GrGLTextureRenderTarget(gpu, desc, texIDDesc, rtIDDesc, false)); 532e6055b3ea14a04fcde1ac1974a70bf00b1e295bkkinnunen} 54