14ea13dcd270953215f51345e83708c16963d332fMathias Agopian/* 24ea13dcd270953215f51345e83708c16963d332fMathias Agopian * Copyright (C) 2006 The Android Open Source Project 34ea13dcd270953215f51345e83708c16963d332fMathias Agopian * 44ea13dcd270953215f51345e83708c16963d332fMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 54ea13dcd270953215f51345e83708c16963d332fMathias Agopian * you may not use this file except in compliance with the License. 64ea13dcd270953215f51345e83708c16963d332fMathias Agopian * You may obtain a copy of the License at 74ea13dcd270953215f51345e83708c16963d332fMathias Agopian * 84ea13dcd270953215f51345e83708c16963d332fMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 94ea13dcd270953215f51345e83708c16963d332fMathias Agopian * 104ea13dcd270953215f51345e83708c16963d332fMathias Agopian * Unless required by applicable law or agreed to in writing, software 114ea13dcd270953215f51345e83708c16963d332fMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 124ea13dcd270953215f51345e83708c16963d332fMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134ea13dcd270953215f51345e83708c16963d332fMathias Agopian * See the License for the specific language governing permissions and 144ea13dcd270953215f51345e83708c16963d332fMathias Agopian * limitations under the License. 154ea13dcd270953215f51345e83708c16963d332fMathias Agopian */ 164ea13dcd270953215f51345e83708c16963d332fMathias Agopian 17f75a23d54cc9e5f7b6b976e65b6ec346178f306dMartijn Coenen#ifndef ANDROID_HARDWARE_BUFFEREDTEXTOUTPUT_H 18f75a23d54cc9e5f7b6b976e65b6ec346178f306dMartijn Coenen#define ANDROID_HARDWARE_BUFFEREDTEXTOUTPUT_H 194ea13dcd270953215f51345e83708c16963d332fMathias Agopian 204080edcfb5810a4a1817c03740f5f1bb19815ae1Martijn Coenen#include <hwbinder/TextOutput.h> 214ea13dcd270953215f51345e83708c16963d332fMathias Agopian#include <utils/threads.h> 22dbe88e309ff8d62abff9294aca177403e183d364Colin Cross#include <sys/uio.h> 234ea13dcd270953215f51345e83708c16963d332fMathias Agopian 244ea13dcd270953215f51345e83708c16963d332fMathias Agopian// --------------------------------------------------------------------------- 254ea13dcd270953215f51345e83708c16963d332fMathias Agopiannamespace android { 26f75a23d54cc9e5f7b6b976e65b6ec346178f306dMartijn Coenennamespace hardware { 274ea13dcd270953215f51345e83708c16963d332fMathias Agopian 284ea13dcd270953215f51345e83708c16963d332fMathias Agopianclass BufferedTextOutput : public TextOutput 294ea13dcd270953215f51345e83708c16963d332fMathias Agopian{ 304ea13dcd270953215f51345e83708c16963d332fMathias Agopianpublic: 314ea13dcd270953215f51345e83708c16963d332fMathias Agopian //** Flags for constructor */ 324ea13dcd270953215f51345e83708c16963d332fMathias Agopian enum { 334ea13dcd270953215f51345e83708c16963d332fMathias Agopian MULTITHREADED = 0x0001 344ea13dcd270953215f51345e83708c16963d332fMathias Agopian }; 354ea13dcd270953215f51345e83708c16963d332fMathias Agopian 364ea13dcd270953215f51345e83708c16963d332fMathias Agopian BufferedTextOutput(uint32_t flags = 0); 374ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual ~BufferedTextOutput(); 384ea13dcd270953215f51345e83708c16963d332fMathias Agopian 394ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual status_t print(const char* txt, size_t len); 404ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual void moveIndent(int delta); 414ea13dcd270953215f51345e83708c16963d332fMathias Agopian 424ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual void pushBundle(); 434ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual void popBundle(); 444ea13dcd270953215f51345e83708c16963d332fMathias Agopian 454ea13dcd270953215f51345e83708c16963d332fMathias Agopianprotected: 464ea13dcd270953215f51345e83708c16963d332fMathias Agopian virtual status_t writeLines(const struct iovec& vec, size_t N) = 0; 474ea13dcd270953215f51345e83708c16963d332fMathias Agopian 484ea13dcd270953215f51345e83708c16963d332fMathias Agopianprivate: 494ea13dcd270953215f51345e83708c16963d332fMathias Agopian struct BufferState; 504ea13dcd270953215f51345e83708c16963d332fMathias Agopian struct ThreadState; 514ea13dcd270953215f51345e83708c16963d332fMathias Agopian 524ea13dcd270953215f51345e83708c16963d332fMathias Agopian static ThreadState*getThreadState(); 534ea13dcd270953215f51345e83708c16963d332fMathias Agopian static void threadDestructor(void *st); 544ea13dcd270953215f51345e83708c16963d332fMathias Agopian 554ea13dcd270953215f51345e83708c16963d332fMathias Agopian BufferState*getBuffer() const; 564ea13dcd270953215f51345e83708c16963d332fMathias Agopian 574ea13dcd270953215f51345e83708c16963d332fMathias Agopian uint32_t mFlags; 584ea13dcd270953215f51345e83708c16963d332fMathias Agopian const int32_t mSeq; 594ea13dcd270953215f51345e83708c16963d332fMathias Agopian const int32_t mIndex; 604ea13dcd270953215f51345e83708c16963d332fMathias Agopian 614ea13dcd270953215f51345e83708c16963d332fMathias Agopian Mutex mLock; 624ea13dcd270953215f51345e83708c16963d332fMathias Agopian BufferState* mGlobalState; 634ea13dcd270953215f51345e83708c16963d332fMathias Agopian}; 644ea13dcd270953215f51345e83708c16963d332fMathias Agopian 654ea13dcd270953215f51345e83708c16963d332fMathias Agopian// --------------------------------------------------------------------------- 66f75a23d54cc9e5f7b6b976e65b6ec346178f306dMartijn Coenen}; // namespace hardware 674ea13dcd270953215f51345e83708c16963d332fMathias Agopian}; // namespace android 684ea13dcd270953215f51345e83708c16963d332fMathias Agopian 69f75a23d54cc9e5f7b6b976e65b6ec346178f306dMartijn Coenen#endif // ANDROID_HARDWARE_BUFFEREDTEXTOUTPUT_H 70