/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkEventTracingPriv_DEFINED
#define SkEventTracingPriv_DEFINED

#include "SkMutex.h"

/**
 * Construct and install an SkEventTracer, based on the mode,
 * defaulting to the --trace command line argument.
 */
void initializeEventTracingForTools(const char* mode = nullptr);

/**
 * Helper class used by internal implementations of SkEventTracer to manage categories.
 */
class SkEventTracingCategories {
public:
    SkEventTracingCategories() : fNumCategories(0) {}

    uint8_t* getCategoryGroupEnabled(const char* name);
    const char* getCategoryGroupName(const uint8_t* categoryEnabledFlag);

private:
    enum { kMaxCategories = 256 };

    struct CategoryState {
        uint8_t fEnabled;
        const char* fName;
    };

    CategoryState fCategories[kMaxCategories];
    int fNumCategories;
    SkMutex fMutex;
};

#endif
