skia2/include/core/SkTraceMemoryDump.h
Derek Sollenberger cf6da8c0f2 Dump additional details about the gpu resources.
GpuResources now dump optional string values that describe the type and
category of the resource.  The type provides a description of the kind
of resource it is (e.g. texture, buffer object, stencil, etc.) and the
category describes what the resource is currently tasked to do (e.g.
path masks, images, scratch, etc.)

This CL also refactors the dump logic in an attempt to consolidate
duplicated code into GrGpuResources.cpp.

Bug: b/74435803
Change-Id: I83cae825f41e6450a21398ab3ecea349c7c61c15
Reviewed-on: https://skia-review.googlesource.com/115989
Commit-Queue: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
2018-03-29 18:08:15 +00:00

91 lines
3.3 KiB
C++

/*
* Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkTraceMemoryDump_DEFINED
#define SkTraceMemoryDump_DEFINED
#include "SkTypes.h"
class SkDiscardableMemory;
/**
* Interface for memory tracing.
* This interface is meant to be passed as argument to the memory dump methods of Skia objects.
* The implementation of this interface is provided by the embedder.
*/
class SK_API SkTraceMemoryDump {
public:
/**
* Enum to specify the level of the requested details for the dump from the Skia objects.
*/
enum LevelOfDetail {
// Dump only the minimal details to get the total memory usage (Usually just the totals).
kLight_LevelOfDetail,
// Dump the detailed breakdown of the objects in the caches.
kObjectsBreakdowns_LevelOfDetail
};
/**
* Appends a new memory dump (i.e. a row) to the trace memory infrastructure.
* If dumpName does not exist yet, a new one is created. Otherwise, a new column is appended to
* the previously created dump.
* Arguments:
* dumpName: an absolute, slash-separated, name for the item being dumped
* e.g., "skia/CacheX/EntryY".
* valueName: a string indicating the name of the column.
* e.g., "size", "active_size", "number_of_objects".
* This string is supposed to be long lived and is NOT copied.
* units: a string indicating the units for the value.
* e.g., "bytes", "objects".
* This string is supposed to be long lived and is NOT copied.
* value: the actual value being dumped.
*/
virtual void dumpNumericValue(const char* dumpName,
const char* valueName,
const char* units,
uint64_t value) = 0;
virtual void dumpStringValue(const char* /*dumpName*/,
const char* /*valueName*/,
const char* /*value*/) { }
/**
* Sets the memory backing for an existing dump.
* backingType and backingObjectId are used by the embedder to associate the memory dumped via
* dumpNumericValue with the corresponding dump that backs the memory.
*/
virtual void setMemoryBacking(const char* dumpName,
const char* backingType,
const char* backingObjectId) = 0;
/**
* Specialization for memory backed by discardable memory.
*/
virtual void setDiscardableMemoryBacking(
const char* dumpName,
const SkDiscardableMemory& discardableMemoryObject) = 0;
/**
* Returns the type of details requested in the dump. The granularity of the dump is supposed to
* match the LevelOfDetail argument. The level of detail must not affect the total size
* reported, but only granularity of the child entries.
*/
virtual LevelOfDetail getRequestedDetails() const = 0;
/**
* Returns true if we should dump wrapped objects. Wrapped objects come from outside Skia, and
* may be independently tracked there.
*/
virtual bool shouldDumpWrappedObjects() const { return true; }
protected:
virtual ~SkTraceMemoryDump() { }
};
#endif