1b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy/*
2b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Copyright (C) 2010 The Android Open Source Project
3b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy *
4b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * you may not use this file except in compliance with the License.
6b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * You may obtain a copy of the License at
7b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy *
8b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy *
10b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * Unless required by applicable law or agreed to in writing, software
11b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * See the License for the specific language governing permissions and
14b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy * limitations under the License.
15b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy */
16b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_GAMMA_FONT_RENDERER_H
185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_GAMMA_FONT_RENDERER_H
19b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
20b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy#include "FontRenderer.h"
214121063313ac0d6f69f6253cac821d0c1c122086Romain Guy#include "Program.h"
22b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
23c08820f587ad94698691a6657e87712de07e484cChris Craik#include <SkPaint.h>
24c08820f587ad94698691a6657e87712de07e484cChris Craik
25baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv#include <utils/String8.h>
26baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv
27b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace android {
28b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guynamespace uirenderer {
29b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
30b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guyclass GammaFontRenderer {
31b1d0a4ed21168fefcb82232c8f22cb95d60acb85Romain Guypublic:
32b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy    GammaFontRenderer();
33eca0ca2424afc1e98912405906edfc32f7733e16Romain Guy
34c08820f587ad94698691a6657e87712de07e484cChris Craik    void clear() {
35f636e63c44fb9d9a299908f1d88da8e0a02d019cJohn Reck        mRenderer.reset(nullptr);
366e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
376e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
38c08820f587ad94698691a6657e87712de07e484cChris Craik    void flush() {
396e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (mRenderer) {
406e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy            mRenderer->flushLargeCaches();
416e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
426e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
436e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
44c08820f587ad94698691a6657e87712de07e484cChris Craik    FontRenderer& getFontRenderer() {
456e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        if (!mRenderer) {
46c08820f587ad94698691a6657e87712de07e484cChris Craik            mRenderer.reset(new FontRenderer(&mGammaTable[0]));
476e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        }
486e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy        return *mRenderer;
496e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
506e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
51baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv    void dumpMemoryUsage(String8& log) const {
52baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        if (mRenderer) {
53baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv            mRenderer->dumpMemoryUsage(log);
54baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        } else {
55baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv            log.appendFormat("FontRenderer doesn't exist.\n");
56baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        }
57baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv    }
58baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv
59baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv    uint32_t getSize() const {
60baf29e7cf433624687c9d6b3bac180d33add8e0fsergeyv        return mRenderer ? mRenderer->getSize() : 0;
616e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    }
626e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy
63c08820f587ad94698691a6657e87712de07e484cChris Craik    void endPrecaching();
64cf51a4199835e9604aa4c8b3854306f8fbabbf33Romain Guy
656e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guyprivate:
66c08820f587ad94698691a6657e87712de07e484cChris Craik    std::unique_ptr<FontRenderer> mRenderer;
676e25e38e43f9e7f71397dfab7ed32c81c7bf7d46Romain Guy    uint8_t mGammaTable[256];
68b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy};
69b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
70b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace uirenderer
71b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy}; // namespace android
72b45c0c9774bd19a9dbe77d149abae4e124b08bf6Romain Guy
735b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_GAMMA_FONT_RENDERER_H
74