| Index: src/gpu/GrTest.cpp
|
| diff --git a/src/gpu/GrTest.cpp b/src/gpu/GrTest.cpp
|
| index e4c7a8351398ded88c5ee06f458d565824210eed..168907030844b383bf2a682996bac29b046df713 100644
|
| --- a/src/gpu/GrTest.cpp
|
| +++ b/src/gpu/GrTest.cpp
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "GrInOrderDrawBuffer.h"
|
| #include "GrResourceCache2.h"
|
| +#include "SkString.h"
|
|
|
| void GrTestTarget::init(GrContext* ctx, GrDrawTarget* target) {
|
| SkASSERT(!fContext);
|
| @@ -40,6 +41,80 @@ void GrContext::purgeAllUnlockedResources() {
|
| fResourceCache2->purgeAllUnlocked();
|
| }
|
|
|
| +void GrContext::dumpCacheStats(SkString* out) const {
|
| +#if GR_CACHE_STATS
|
| + fResourceCache2->dumpStats(out);
|
| +#endif
|
| +}
|
| +
|
| +void GrContext::printCacheStats() const {
|
| + SkString out;
|
| + this->dumpCacheStats(&out);
|
| + SkDebugf(out.c_str());
|
| +}
|
| +
|
| +void GrContext::dumpGpuStats(SkString* out) const {
|
| +#if GR_GPU_STATS
|
| + return fGpu->stats()->dump(out);
|
| +#endif
|
| +}
|
| +
|
| +void GrContext::printGpuStats() const {
|
| + SkString out;
|
| + this->dumpGpuStats(&out);
|
| + SkDebugf(out.c_str());
|
| +}
|
| +
|
| +#if GR_GPU_STATS
|
| +void GrGpu::Stats::dump(SkString* out) {
|
| + out->appendf("Render Target Binds: %d\n", fRenderTargetBinds);
|
| + out->appendf("Shader Compilations: %d\n", fShaderCompilations);
|
| +}
|
| +#endif
|
| +
|
| +#if GR_CACHE_STATS
|
| +void GrResourceCache2::dumpStats(SkString* out) const {
|
| + this->validate();
|
| +
|
| + int locked = 0;
|
| + int scratch = 0;
|
| + int wrapped = 0;
|
| + size_t unbudgetedSize = 0;
|
| +
|
| + ResourceList::Iter iter;
|
| + GrGpuResource* resource = iter.init(fResources, ResourceList::Iter::kHead_IterStart);
|
| +
|
| + for ( ; resource; resource = iter.next()) {
|
| + if (!resource->isPurgeable()) {
|
| + ++locked;
|
| + }
|
| + if (resource->cacheAccess().isScratch()) {
|
| + ++scratch;
|
| + }
|
| + if (resource->cacheAccess().isWrapped()) {
|
| + ++wrapped;
|
| + }
|
| + if (!resource->cacheAccess().isBudgeted()) {
|
| + unbudgetedSize += resource->gpuMemorySize();
|
| + }
|
| + }
|
| +
|
| + float countUtilization = (100.f * fBudgetedCount) / fMaxCount;
|
| + float byteUtilization = (100.f * fBudgetedBytes) / fMaxBytes;
|
| +
|
| + out->appendf("Budget: %d items %d bytes\n", fMaxCount, (int)fMaxBytes);
|
| + out->appendf("\t\tEntry Count: current %d"
|
| + " (%d budgeted, %d wrapped, %d locked, %d scratch %.2g%% full), high %d\n",
|
| + fCount, fBudgetedCount, wrapped, locked, scratch, countUtilization,
|
| + fHighWaterCount);
|
| + out->appendf("\t\tEntry Bytes: current %d (budgeted %d, %.2g%% full, %d unbudgeted) high %d\n",
|
| + (int)fBytes, (int)fBudgetedBytes, byteUtilization,
|
| + (int)unbudgetedSize, (int)fHighWaterBytes);
|
| +}
|
| +
|
| +#endif
|
| +
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // Code for the mock context. It's built on a mock GrGpu class that does nothing.
|
| ////
|
|
|