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