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