1af102bee518191f1e6ad843f06dcd7a64611462dsergeyv/* 2af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * Copyright (C) 2016 The Android Open Source Project 3af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * 4af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * Licensed under the Apache License, Version 2.0 (the "License"); 5af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * you may not use this file except in compliance with the License. 6af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * You may obtain a copy of the License at 7af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * 8af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * http://www.apache.org/licenses/LICENSE-2.0 9af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * 10af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * Unless required by applicable law or agreed to in writing, software 11af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * distributed under the License is distributed on an "AS IS" BASIS, 12af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * See the License for the specific language governing permissions and 14af102bee518191f1e6ad843f06dcd7a64611462dsergeyv * limitations under the License. 15af102bee518191f1e6ad843f06dcd7a64611462dsergeyv */ 16af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 17af102bee518191f1e6ad843f06dcd7a64611462dsergeyv#pragma once 18af102bee518191f1e6ad843f06dcd7a64611462dsergeyv#include "../utils/RingBuffer.h" 19af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 20af102bee518191f1e6ad843f06dcd7a64611462dsergeyv#include <utils/String8.h> 21af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 22af102bee518191f1e6ad843f06dcd7a64611462dsergeyvnamespace android { 23af102bee518191f1e6ad843f06dcd7a64611462dsergeyvnamespace uirenderer { 24af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 25af102bee518191f1e6ad843f06dcd7a64611462dsergeyvclass CacheTexture; 26af102bee518191f1e6ad843f06dcd7a64611462dsergeyvstruct CachedGlyphInfo; 27af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 28af102bee518191f1e6ad843f06dcd7a64611462dsergeyv// Tracks glyph uploads and recent rendered/skipped glyphs, so it can give an idea 29af102bee518191f1e6ad843f06dcd7a64611462dsergeyv// what a missing character is: skipped glyph, wrong coordinates in cache texture etc. 30af102bee518191f1e6ad843f06dcd7a64611462dsergeyvclass FontCacheHistoryTracker { 31af102bee518191f1e6ad843f06dcd7a64611462dsergeyvpublic: 32af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void glyphRendered(CachedGlyphInfo*, int penX, int penY); 33af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void glyphUploaded(CacheTexture*, uint32_t x, uint32_t y, uint16_t glyphW, uint16_t glyphH); 34af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void glyphsCleared(CacheTexture*); 35af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void frameCompleted(); 36af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 37af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void dump(String8& log) const; 38af102bee518191f1e6ad843f06dcd7a64611462dsergeyvprivate: 39af102bee518191f1e6ad843f06dcd7a64611462dsergeyv struct CachedGlyph { 40af102bee518191f1e6ad843f06dcd7a64611462dsergeyv void* texture; 41af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t generation; 42af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t startX; 43af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t startY; 44af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t bitmapW; 45af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t bitmapH; 46af102bee518191f1e6ad843f06dcd7a64611462dsergeyv }; 47af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 48af102bee518191f1e6ad843f06dcd7a64611462dsergeyv struct RenderEntry { 49af102bee518191f1e6ad843f06dcd7a64611462dsergeyv CachedGlyph glyph; 50af102bee518191f1e6ad843f06dcd7a64611462dsergeyv int penX; 51af102bee518191f1e6ad843f06dcd7a64611462dsergeyv int penY; 52af102bee518191f1e6ad843f06dcd7a64611462dsergeyv }; 53af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 54af102bee518191f1e6ad843f06dcd7a64611462dsergeyv static void dumpCachedGlyph(String8& log, const CachedGlyph& glyph); 55af102bee518191f1e6ad843f06dcd7a64611462dsergeyv static void dumpRenderEntry(String8& log, const RenderEntry& entry); 56af102bee518191f1e6ad843f06dcd7a64611462dsergeyv static void dumpUploadEntry(String8& log, const CachedGlyph& glyph); 57af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 58af102bee518191f1e6ad843f06dcd7a64611462dsergeyv RingBuffer<RenderEntry, 300> mRenderHistory; 59af102bee518191f1e6ad843f06dcd7a64611462dsergeyv RingBuffer<CachedGlyph, 120> mUploadHistory; 60af102bee518191f1e6ad843f06dcd7a64611462dsergeyv uint16_t generation = 0; 61af102bee518191f1e6ad843f06dcd7a64611462dsergeyv}; 62af102bee518191f1e6ad843f06dcd7a64611462dsergeyv 63af102bee518191f1e6ad843f06dcd7a64611462dsergeyv}; // namespace uirenderer 64af102bee518191f1e6ad843f06dcd7a64611462dsergeyv}; // namespace android