11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkGraphics_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkGraphics_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkGraphics {
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Call this at process initialization time if your environment does not
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  permit static global initializers that execute code. Note that
201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Init() is not thread-safe.
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
225956d1c224aadf1d2712b46b32d3fc69a19915bdThe Android Open Source Project    static void Init();
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Call this to release any memory held privately, such as the font cache.
261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static void Term();
284c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Return the version numbers for the library. If the parameter is not
311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  null, it is set to the version number.
324c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed     */
334c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    static void GetVersion(int32_t* major, int32_t* minor, int32_t* patch);
344c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Return the max number of bytes that should be used by the font cache.
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  If the cache needs to allocate more, it will purge previous entries.
381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  This max can be changed by calling SetFontCacheLimit().
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static size_t GetFontCacheLimit();
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Specify the max number of bytes that should be used by the font cache.
441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  If the cache needs to allocate more, it will purge previous entries.
451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *
461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  This function returns the previous setting, as if GetFontCacheLimit()
471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  had be called before the new limit was set.
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static size_t SetFontCacheLimit(size_t bytes);
501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  For debugging purposes, this will attempt to purge the font cache. It
531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  does not change the limit, but will cause subsequent font measures and
541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  draws to be recreated, since they will no longer be in the cache.
551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static void PurgeFontCache();
571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    /**
591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  Applications with command line options may pass optional state, such
601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  as cache sizes, here, for instance:
611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  font-cache-limit=12345678
621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *
631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  The flags format is name=value[;name=value...] with no spaces.
641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     *  This format is subject to change.
651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger     */
661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static void SetFlags(const char* flags);
671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** This is automatically called by SkGraphics::Init(), and must be
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        implemented by the host OS. This allows the host OS to register a callback
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        with the C++ runtime to call SkGraphics::FreeCaches()
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static void InstallNewHandler();
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
769f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reedclass SkAutoGraphics {
779f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reedpublic:
789f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed    SkAutoGraphics() {
799f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed        SkGraphics::Init();
809f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed    }
819f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed    ~SkAutoGraphics() {
829f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed        SkGraphics::Term();
839f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed    }
849f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed};
859f0b433bdd1680cd1d371c19d7e0ffde8fb2c484Mike Reed
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
88