android_frameworks_base/libs/hwui/GammaFontRenderer.h
Chet Haase 7de0cb12d0 Make glyph cache more flexible
Some GPU architectures could not handle the previous implementation
of our glyph cache. Frequent uploads would cause memory problems in the GPU
and eventually a crash due to these memory issues. The solution is to move to
a system of several, smaller caches instead of one monolythic cache for all
glyphs.

Change-Id: I0fc7a323360940d16d5a33eeb33abfab194c5920
2011-12-13 13:41:58 -08:00

72 lines
1.7 KiB
C++

/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_HWUI_GAMMA_FONT_RENDERER_H
#define ANDROID_HWUI_GAMMA_FONT_RENDERER_H
#include <SkPaint.h>
#include "FontRenderer.h"
namespace android {
namespace uirenderer {
struct GammaFontRenderer {
GammaFontRenderer();
~GammaFontRenderer();
enum Gamma {
kGammaDefault = 0,
kGammaBlack = 1,
kGammaWhite = 2,
kGammaCount = 3
};
void clear();
void flush();
FontRenderer& getFontRenderer(const SkPaint* paint);
uint32_t getFontRendererCount() const {
return kGammaCount;
}
uint32_t getFontRendererSize(uint32_t fontRenderer) const {
if (fontRenderer >= kGammaCount) return 0;
FontRenderer* renderer = mRenderers[fontRenderer];
if (!renderer) return 0;
return renderer->getCacheSize();
}
private:
FontRenderer* getRenderer(Gamma gamma);
uint32_t mRenderersUsageCount[kGammaCount];
FontRenderer* mRenderers[kGammaCount];
int mBlackThreshold;
int mWhiteThreshold;
uint8_t mGammaTable[256 * kGammaCount];
};
}; // namespace uirenderer
}; // namespace android
#endif // ANDROID_HWUI_GAMMA_FONT_RENDERER_H