1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
9*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GL)
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTraceMemoryDump.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDirectContext.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrDirectContextPriv.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLBuffer.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLDefines.h"
21*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLGpu.h"
22*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLRenderTarget.h"
23*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTexture.h"
24*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTextureRenderTarget.h"
25*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTypesPriv.h"
26*c8dee2aaSAndroid Build Coastguard Worker #include "tests/CtsEnforcement.h"
27*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
28*c8dee2aaSAndroid Build Coastguard Worker
29*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef>
30*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
31*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
32*c8dee2aaSAndroid Build Coastguard Worker
33*c8dee2aaSAndroid Build Coastguard Worker class SkDiscardableMemory;
34*c8dee2aaSAndroid Build Coastguard Worker struct GrContextOptions;
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Worker /*
37*c8dee2aaSAndroid Build Coastguard Worker * Build test for SkTraceMemoryDump.
38*c8dee2aaSAndroid Build Coastguard Worker */
39*c8dee2aaSAndroid Build Coastguard Worker class TestSkTraceMemoryDump : public SkTraceMemoryDump {
40*c8dee2aaSAndroid Build Coastguard Worker public:
TestSkTraceMemoryDump(bool shouldDumpWrappedObjects)41*c8dee2aaSAndroid Build Coastguard Worker TestSkTraceMemoryDump(bool shouldDumpWrappedObjects)
42*c8dee2aaSAndroid Build Coastguard Worker : fShouldDumpWrappedObjects(shouldDumpWrappedObjects) {}
~TestSkTraceMemoryDump()43*c8dee2aaSAndroid Build Coastguard Worker ~TestSkTraceMemoryDump() override { }
44*c8dee2aaSAndroid Build Coastguard Worker
dumpNumericValue(const char * dumpName,const char * valueName,const char * units,uint64_t value)45*c8dee2aaSAndroid Build Coastguard Worker void dumpNumericValue(const char* dumpName, const char* valueName, const char* units,
46*c8dee2aaSAndroid Build Coastguard Worker uint64_t value) override {
47*c8dee2aaSAndroid Build Coastguard Worker // Only count "size" dumps, others are just providing metadata.
48*c8dee2aaSAndroid Build Coastguard Worker if (SkString("size") == SkString(valueName)) {
49*c8dee2aaSAndroid Build Coastguard Worker ++fNumDumpedObjects;
50*c8dee2aaSAndroid Build Coastguard Worker fDumpedObjectsSize += value;
51*c8dee2aaSAndroid Build Coastguard Worker }
52*c8dee2aaSAndroid Build Coastguard Worker }
setMemoryBacking(const char * dumpName,const char * backingType,const char * backingObjectId)53*c8dee2aaSAndroid Build Coastguard Worker void setMemoryBacking(const char* dumpName, const char* backingType,
54*c8dee2aaSAndroid Build Coastguard Worker const char* backingObjectId) override { }
setDiscardableMemoryBacking(const char * dumpName,const SkDiscardableMemory & discardableMemoryObject)55*c8dee2aaSAndroid Build Coastguard Worker void setDiscardableMemoryBacking(
56*c8dee2aaSAndroid Build Coastguard Worker const char* dumpName,
57*c8dee2aaSAndroid Build Coastguard Worker const SkDiscardableMemory& discardableMemoryObject) override { }
getRequestedDetails() const58*c8dee2aaSAndroid Build Coastguard Worker LevelOfDetail getRequestedDetails() const override {
59*c8dee2aaSAndroid Build Coastguard Worker return SkTraceMemoryDump::kObjectsBreakdowns_LevelOfDetail;
60*c8dee2aaSAndroid Build Coastguard Worker }
shouldDumpWrappedObjects() const61*c8dee2aaSAndroid Build Coastguard Worker bool shouldDumpWrappedObjects() const override { return fShouldDumpWrappedObjects; }
62*c8dee2aaSAndroid Build Coastguard Worker
numDumpedObjects() const63*c8dee2aaSAndroid Build Coastguard Worker size_t numDumpedObjects() const { return fNumDumpedObjects; }
dumpedObjectsSize() const64*c8dee2aaSAndroid Build Coastguard Worker size_t dumpedObjectsSize() const { return fDumpedObjectsSize; }
65*c8dee2aaSAndroid Build Coastguard Worker
66*c8dee2aaSAndroid Build Coastguard Worker private:
67*c8dee2aaSAndroid Build Coastguard Worker bool fShouldDumpWrappedObjects;
68*c8dee2aaSAndroid Build Coastguard Worker size_t fNumDumpedObjects = 0;
69*c8dee2aaSAndroid Build Coastguard Worker size_t fDumpedObjectsSize = 0;
70*c8dee2aaSAndroid Build Coastguard Worker };
71*c8dee2aaSAndroid Build Coastguard Worker
ValidateMemoryDumps(skiatest::Reporter * reporter,GrDirectContext * dContext,size_t numDumpedObjects,size_t size,bool isOwned)72*c8dee2aaSAndroid Build Coastguard Worker void ValidateMemoryDumps(skiatest::Reporter* reporter, GrDirectContext* dContext,
73*c8dee2aaSAndroid Build Coastguard Worker size_t numDumpedObjects, size_t size, bool isOwned) {
74*c8dee2aaSAndroid Build Coastguard Worker // Note than one entry in the dumped objects is expected for the text blob cache.
75*c8dee2aaSAndroid Build Coastguard Worker TestSkTraceMemoryDump dump_with_wrapped(true /* shouldDumpWrappedObjects */);
76*c8dee2aaSAndroid Build Coastguard Worker dContext->dumpMemoryStatistics(&dump_with_wrapped);
77*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, numDumpedObjects == dump_with_wrapped.numDumpedObjects());
78*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, size == dump_with_wrapped.dumpedObjectsSize());
79*c8dee2aaSAndroid Build Coastguard Worker
80*c8dee2aaSAndroid Build Coastguard Worker TestSkTraceMemoryDump dump_no_wrapped(false /* shouldDumpWrappedObjects */);
81*c8dee2aaSAndroid Build Coastguard Worker dContext->dumpMemoryStatistics(&dump_no_wrapped);
82*c8dee2aaSAndroid Build Coastguard Worker if (isOwned) {
83*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, numDumpedObjects == dump_no_wrapped.numDumpedObjects());
84*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, size == dump_no_wrapped.dumpedObjectsSize());
85*c8dee2aaSAndroid Build Coastguard Worker } else {
86*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 1 == dump_no_wrapped.numDumpedObjects());
87*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, 0 == dump_no_wrapped.dumpedObjectsSize());
88*c8dee2aaSAndroid Build Coastguard Worker }
89*c8dee2aaSAndroid Build Coastguard Worker }
90*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLBuffer,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)91*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLBuffer,
92*c8dee2aaSAndroid Build Coastguard Worker reporter,
93*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
94*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
95*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
96*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
97*c8dee2aaSAndroid Build Coastguard Worker const size_t kMemorySize = 1024;
98*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLBuffer> buffer =
99*c8dee2aaSAndroid Build Coastguard Worker GrGLBuffer::Make(gpu, kMemorySize, GrGpuBufferType::kVertex, kDynamic_GrAccessPattern);
100*c8dee2aaSAndroid Build Coastguard Worker
101*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 2, kMemorySize, true /* isOwned */);
102*c8dee2aaSAndroid Build Coastguard Worker }
103*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLTexture,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)104*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLTexture,
105*c8dee2aaSAndroid Build Coastguard Worker reporter,
106*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
107*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
108*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
109*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
110*c8dee2aaSAndroid Build Coastguard Worker
111*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture::Desc desc;
112*c8dee2aaSAndroid Build Coastguard Worker desc.fTarget = GR_GL_TEXTURE_2D;
113*c8dee2aaSAndroid Build Coastguard Worker desc.fID = 7; // Arbitrary, we don't actually use the texture.
114*c8dee2aaSAndroid Build Coastguard Worker desc.fFormat = GrGLFormat::kRGBA8;
115*c8dee2aaSAndroid Build Coastguard Worker desc.fOwnership = GrBackendObjectOwnership::kOwned;
116*c8dee2aaSAndroid Build Coastguard Worker desc.fIsProtected = skgpu::Protected::kNo;
117*c8dee2aaSAndroid Build Coastguard Worker desc.fSize = SkISize::Make(64, 64);
118*c8dee2aaSAndroid Build Coastguard Worker
119*c8dee2aaSAndroid Build Coastguard Worker auto texture = sk_make_sp<GrGLTexture>(gpu,
120*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted::kNo,
121*c8dee2aaSAndroid Build Coastguard Worker desc,
122*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus::kNotAllocated,
123*c8dee2aaSAndroid Build Coastguard Worker /*label=*/"SkTraceMemoryDump_ownedGLTexture");
124*c8dee2aaSAndroid Build Coastguard Worker
125*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 2, texture->gpuMemorySize(), true /* isOwned */);
126*c8dee2aaSAndroid Build Coastguard Worker }
127*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_unownedGLTexture,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)128*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_unownedGLTexture,
129*c8dee2aaSAndroid Build Coastguard Worker reporter,
130*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
131*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
132*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
133*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
134*c8dee2aaSAndroid Build Coastguard Worker
135*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture::Desc desc;
136*c8dee2aaSAndroid Build Coastguard Worker desc.fTarget = GR_GL_TEXTURE_2D;
137*c8dee2aaSAndroid Build Coastguard Worker desc.fID = 7; // Arbitrary, we don't actually use the texture.
138*c8dee2aaSAndroid Build Coastguard Worker desc.fFormat = GrGLFormat::kRGBA8;
139*c8dee2aaSAndroid Build Coastguard Worker desc.fOwnership = GrBackendObjectOwnership::kBorrowed;
140*c8dee2aaSAndroid Build Coastguard Worker desc.fSize = SkISize::Make(64, 64);
141*c8dee2aaSAndroid Build Coastguard Worker desc.fIsProtected = skgpu::Protected::kNo;
142*c8dee2aaSAndroid Build Coastguard Worker
143*c8dee2aaSAndroid Build Coastguard Worker auto params = sk_make_sp<GrGLTextureParameters>();
144*c8dee2aaSAndroid Build Coastguard Worker
145*c8dee2aaSAndroid Build Coastguard Worker auto texture = GrGLTexture::MakeWrapped(gpu,
146*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus::kNotAllocated,
147*c8dee2aaSAndroid Build Coastguard Worker desc,
148*c8dee2aaSAndroid Build Coastguard Worker std::move(params),
149*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable::kNo,
150*c8dee2aaSAndroid Build Coastguard Worker kRead_GrIOType,
151*c8dee2aaSAndroid Build Coastguard Worker /*label=*/{});
152*c8dee2aaSAndroid Build Coastguard Worker
153*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 2, texture->gpuMemorySize(), false /* isOwned */);
154*c8dee2aaSAndroid Build Coastguard Worker }
155*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLRenderTarget,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)156*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLRenderTarget,
157*c8dee2aaSAndroid Build Coastguard Worker reporter,
158*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
159*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
160*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
161*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
162*c8dee2aaSAndroid Build Coastguard Worker
163*c8dee2aaSAndroid Build Coastguard Worker static constexpr auto kSize = SkISize::Make(64, 64);
164*c8dee2aaSAndroid Build Coastguard Worker
165*c8dee2aaSAndroid Build Coastguard Worker GrGLRenderTarget::IDs rtIDs;
166*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMultisampleFBOID = 0;
167*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fRTFBOOwnership = GrBackendObjectOwnership::kOwned;
168*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fSingleSampleFBOID = 20;
169*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMSColorRenderbufferID = 0;
170*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fTotalMemorySamplesPerPixel = 1;
171*c8dee2aaSAndroid Build Coastguard Worker
172*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLRenderTarget> rt = GrGLRenderTarget::MakeWrapped(gpu,
173*c8dee2aaSAndroid Build Coastguard Worker kSize,
174*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat::kRGBA8,
175*c8dee2aaSAndroid Build Coastguard Worker 1,
176*c8dee2aaSAndroid Build Coastguard Worker rtIDs,
177*c8dee2aaSAndroid Build Coastguard Worker 0,
178*c8dee2aaSAndroid Build Coastguard Worker skgpu::Protected::kNo,
179*c8dee2aaSAndroid Build Coastguard Worker /*label=*/{});
180*c8dee2aaSAndroid Build Coastguard Worker
181*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 2, rt->gpuMemorySize(), true /* isOwned */);
182*c8dee2aaSAndroid Build Coastguard Worker }
183*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_unownedGLRenderTarget,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)184*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_unownedGLRenderTarget,
185*c8dee2aaSAndroid Build Coastguard Worker reporter,
186*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
187*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
188*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
189*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
190*c8dee2aaSAndroid Build Coastguard Worker
191*c8dee2aaSAndroid Build Coastguard Worker static constexpr auto kSize = SkISize::Make(64, 64);
192*c8dee2aaSAndroid Build Coastguard Worker
193*c8dee2aaSAndroid Build Coastguard Worker GrGLRenderTarget::IDs rtIDs;
194*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMultisampleFBOID = 12;
195*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fRTFBOOwnership = GrBackendObjectOwnership::kBorrowed;
196*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fSingleSampleFBOID = 0;
197*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMSColorRenderbufferID = 0;
198*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fTotalMemorySamplesPerPixel = 4;
199*c8dee2aaSAndroid Build Coastguard Worker
200*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLRenderTarget> rt = GrGLRenderTarget::MakeWrapped(gpu,
201*c8dee2aaSAndroid Build Coastguard Worker kSize,
202*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat::kRGBA8,
203*c8dee2aaSAndroid Build Coastguard Worker 4,
204*c8dee2aaSAndroid Build Coastguard Worker rtIDs,
205*c8dee2aaSAndroid Build Coastguard Worker 0,
206*c8dee2aaSAndroid Build Coastguard Worker skgpu::Protected::kNo,
207*c8dee2aaSAndroid Build Coastguard Worker /*label=*/{});
208*c8dee2aaSAndroid Build Coastguard Worker
209*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 2, rt->gpuMemorySize(), false /* isOwned */);
210*c8dee2aaSAndroid Build Coastguard Worker }
211*c8dee2aaSAndroid Build Coastguard Worker
DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLTextureRenderTarget,reporter,ctxInfo,CtsEnforcement::kApiLevel_T)212*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_GL_CONTEXT(SkTraceMemoryDump_ownedGLTextureRenderTarget,
213*c8dee2aaSAndroid Build Coastguard Worker reporter,
214*c8dee2aaSAndroid Build Coastguard Worker ctxInfo,
215*c8dee2aaSAndroid Build Coastguard Worker CtsEnforcement::kApiLevel_T) {
216*c8dee2aaSAndroid Build Coastguard Worker auto dContext = ctxInfo.directContext();
217*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu = static_cast<GrGLGpu*>(dContext->priv().getGpu());
218*c8dee2aaSAndroid Build Coastguard Worker
219*c8dee2aaSAndroid Build Coastguard Worker static constexpr auto kSize = SkISize::Make(64, 64);
220*c8dee2aaSAndroid Build Coastguard Worker
221*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture::Desc texDesc;
222*c8dee2aaSAndroid Build Coastguard Worker texDesc.fSize = kSize;
223*c8dee2aaSAndroid Build Coastguard Worker texDesc.fTarget = GR_GL_TEXTURE_2D;
224*c8dee2aaSAndroid Build Coastguard Worker texDesc.fID = 17;
225*c8dee2aaSAndroid Build Coastguard Worker texDesc.fFormat = GrGLFormat::kRGBA8;
226*c8dee2aaSAndroid Build Coastguard Worker texDesc.fOwnership = GrBackendObjectOwnership::kOwned;
227*c8dee2aaSAndroid Build Coastguard Worker texDesc.fIsProtected = skgpu::Protected::kNo;
228*c8dee2aaSAndroid Build Coastguard Worker
229*c8dee2aaSAndroid Build Coastguard Worker GrGLRenderTarget::IDs rtIDs;
230*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMultisampleFBOID = 12;
231*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fRTFBOOwnership = GrBackendObjectOwnership::kOwned;
232*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fSingleSampleFBOID = 20;
233*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fMSColorRenderbufferID = 22;
234*c8dee2aaSAndroid Build Coastguard Worker rtIDs.fTotalMemorySamplesPerPixel = 9;
235*c8dee2aaSAndroid Build Coastguard Worker
236*c8dee2aaSAndroid Build Coastguard Worker auto texRT = sk_make_sp<GrGLTextureRenderTarget>(
237*c8dee2aaSAndroid Build Coastguard Worker gpu,
238*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted::kYes,
239*c8dee2aaSAndroid Build Coastguard Worker 8,
240*c8dee2aaSAndroid Build Coastguard Worker texDesc,
241*c8dee2aaSAndroid Build Coastguard Worker rtIDs,
242*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus::kNotAllocated,
243*c8dee2aaSAndroid Build Coastguard Worker /*label=*/"SkTraceMemoryDump_ownedGLTextureRenderTarget");
244*c8dee2aaSAndroid Build Coastguard Worker
245*c8dee2aaSAndroid Build Coastguard Worker ValidateMemoryDumps(reporter, dContext, 3, texRT->gpuMemorySize(), true /* isOwned */);
246*c8dee2aaSAndroid Build Coastguard Worker }
247*c8dee2aaSAndroid Build Coastguard Worker
248*c8dee2aaSAndroid Build Coastguard Worker #endif // defined(SK_GL)
249