#include "include/gpu/graphite/Recorder.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkColorSpace.h"
#include "include/core/SkTraceMemoryDump.h"
#include "include/effects/SkRuntimeEffect.h"
#include "include/gpu/graphite/BackendTexture.h"
#include "include/gpu/graphite/GraphiteTypes.h"
#include "include/gpu/graphite/ImageProvider.h"
#include "include/gpu/graphite/Recording.h"
#include "src/core/SkCompressedDataUtils.h"
#include "src/core/SkConvertPixels.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/AtlasTypes.h"
#include "src/gpu/DataUtils.h"
#include "src/gpu/RefCntedCallback.h"
#include "src/gpu/graphite/AtlasProvider.h"
#include "src/gpu/graphite/BufferManager.h"
#include "src/gpu/graphite/Caps.h"
#include "src/gpu/graphite/CommandBuffer.h"
#include "src/gpu/graphite/ContextPriv.h"
#include "src/gpu/graphite/Device.h"
#include "src/gpu/graphite/GlobalCache.h"
#include "src/gpu/graphite/Log.h"
#include "src/gpu/graphite/PathAtlas.h"
#include "src/gpu/graphite/PipelineData.h"
#include "src/gpu/graphite/PipelineDataCache.h"
#include "src/gpu/graphite/ProxyCache.h"
#include "src/gpu/graphite/RasterPathAtlas.h"
#include "src/gpu/graphite/RecorderPriv.h"
#include "src/gpu/graphite/RecordingPriv.h"
#include "src/gpu/graphite/ResourceProvider.h"
#include "src/gpu/graphite/RuntimeEffectDictionary.h"
#include "src/gpu/graphite/ScratchResourceManager.h"
#include "src/gpu/graphite/SharedContext.h"
#include "src/gpu/graphite/Texture.h"
#include "src/gpu/graphite/UploadBufferManager.h"
#include "src/gpu/graphite/task/CopyTask.h"
#include "src/gpu/graphite/task/TaskList.h"
#include "src/gpu/graphite/task/UploadTask.h"
#include "src/gpu/graphite/text/TextAtlasManager.h"
#include "src/image/SkImage_Base.h"
#include "src/text/gpu/StrikeCache.h"
#include "src/text/gpu/TextBlobRedrawCoordinator.h"
namespace skgpu::graphite {
#define ASSERT_SINGLE_OWNER …
#define ASSERT_SINGLE_OWNER_PRIV …
class DefaultImageProvider final : public ImageProvider { … };
RecorderOptions::RecorderOptions() = default;
RecorderOptions::RecorderOptions(const RecorderOptions&) = default;
RecorderOptions::~RecorderOptions() = default;
static uint32_t next_id() { … }
Recorder::Recorder(sk_sp<SharedContext> sharedContext,
const RecorderOptions& options,
const Context* context)
: … { … }
Recorder::~Recorder() { … }
BackendApi Recorder::backend() const { … }
std::unique_ptr<Recording> Recorder::snap() { … }
SkCanvas* Recorder::makeDeferredCanvas(const SkImageInfo& imageInfo,
const TextureInfo& textureInfo) { … }
void Recorder::registerDevice(sk_sp<Device> device) { … }
void Recorder::deregisterDevice(const Device* device) { … }
int Recorder::maxTextureSize() const { … }
BackendTexture Recorder::createBackendTexture(SkISize dimensions, const TextureInfo& info) { … }
#ifdef SK_BUILD_FOR_ANDROID
BackendTexture Recorder::createBackendTexture(AHardwareBuffer* hardwareBuffer,
bool isRenderable,
bool isProtectedContent,
SkISize dimensions,
bool fromAndroidWindow) const {
if (fSharedContext->backend() != BackendApi::kVulkan) {
SKGPU_LOG_W("Creating an AHardwareBuffer-backed BackendTexture is only supported with the"
"Vulkan backend.");
return {};
}
return fResourceProvider->createBackendTexture(hardwareBuffer,
isRenderable,
isProtectedContent,
dimensions,
fromAndroidWindow);
}
#endif
bool Recorder::updateBackendTexture(const BackendTexture& backendTex,
const SkPixmap srcData[],
int numLevels,
GpuFinishedProc finishedProc,
GpuFinishedContext finishedContext) { … }
bool Recorder::updateCompressedBackendTexture(const BackendTexture& backendTex,
const void* data,
size_t dataSize,
GpuFinishedProc finishedProc,
GpuFinishedContext finishedContext) { … }
void Recorder::deleteBackendTexture(const BackendTexture& texture) { … }
void Recorder::addFinishInfo(const InsertFinishInfo& info) { … }
void Recorder::freeGpuResources() { … }
void Recorder::performDeferredCleanup(std::chrono::milliseconds msNotUsed) { … }
size_t Recorder::currentBudgetedBytes() const { … }
size_t Recorder::currentPurgeableBytes() const { … }
size_t Recorder::maxBudgetedBytes() const { … }
void Recorder::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const { … }
void RecorderPriv::addPendingRead(const TextureProxy* proxy) { … }
void RecorderPriv::add(sk_sp<Task> task) { … }
void RecorderPriv::flushTrackedDevices() { … }
sk_sp<TextureProxy> RecorderPriv::CreateCachedProxy(Recorder* recorder,
const SkBitmap& bitmap,
std::string_view label) { … }
size_t RecorderPriv::getResourceCacheLimit() const { … }
#if defined(GPU_TEST_UTILS)
bool RecorderPriv::deviceIsRegistered(Device* device) const {
ASSERT_SINGLE_OWNER_PRIV
for (const sk_sp<Device>& currentDevice : fRecorder->fTrackedDevices) {
if (device == currentDevice.get()) {
return true;
}
}
return false;
}
void RecorderPriv::setContext(Context* context) {
fRecorder->fContext = context;
}
#endif
}