blob: 37dc58378fefcf8f6d5ecbce79722fa6523784ae [file] [edit]
/*
* Copyright 2026 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkLogHandler_DEFINED
#define SkLogHandler_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/core/SkTypes.h"
#include "include/private/SkLogPriority.h"
#include <cstdarg>
/**
* SkLogHandler defines an interface for receiving Skia log messages.
* Clients can implement this interface and install it via SetInstance.
*/
class SK_API SkLogHandler : public SkRefCnt {
public:
~SkLogHandler() override = default;
/**
* Called when a log message is generated (must pass compile-time priority).
* Must be thread-safe since multiple threads may be logging at the same time.
* @param priority The priority of the log message.
* @param format The format string of the log message.
* @param args The arguments for the format string.
*/
virtual void onLog(SkLogPriority priority, const char format[], va_list args) = 0;
/**
* Installs a custom log handler. Returns true if successful (i.e., it's the first call).
* Skia only allows one SkLogHandler to be set and it cannot change after being set.
*/
static bool SetInstance(sk_sp<SkLogHandler>);
/**
* Returns the current log handler. If none has been set, returns nullptr.
*/
static sk_sp<SkLogHandler> GetInstance();
protected:
SkLogHandler() = default;
private:
SkLogHandler(const SkLogHandler&) = delete;
SkLogHandler& operator=(const SkLogHandler&) = delete;
};
#endif // SkLogHandler_DEFINED