zoukankan      html  css  js  c++  java
  • SurfaceFlinger

    D:linuxubuntu ouchlibhybrislibhybris_0.1.0+git20130606+c5d897a.origlibhybris-0.1.0+git20130606+c5d897acompatsurface_flingersurface_flinger_compatibility_layer.cpp
    SfSurface* sf_surface_create(SfClient* client, SfSurfaceCreationParameters* params)
    {
     assert(client);
     assert(params);

     SfSurface* surface = new SfSurface();
     surface->client = client;
     surface->surface_control = surface->client->client->createSurface(
         android::String8(params->name),
         params->w,
         params->h,
         android::PIXEL_FORMAT_RGBA_8888,
         0x300);

     if (surface->surface_control == NULL) {
      report_surface_control_is_null_during_creation();
      delete(surface);
      return NULL;
     }
    void report_surface_control_is_null_during_creation()
    {
     printf("Could not acquire surface control object during surface creation");
    }
    SfClient* sf_client_create()
    {
     return sf_client_create_full(true);
    }
    SfClient* sf_client_create_full(bool egl_support)
    {
     SfClient* client = new SfClient();

     client->client = new android::SurfaceComposerClient();
    D:linuxubuntu ouchlibhybrislibhybris_0.1.0+git20130606+c5d897a.origlibhybris-0.1.0+git20130606+c5d897acompatsurface_flingerdirect_sf_test.cpp
    int main(int argc, char** argv)
    {
     SfClient* sf_client = sf_client_create();
     SfSurface* sf_surface = sf_surface_create(sf_client, &params);
    D:linuxubuntu ouchlibhybrislibhybris_0.1.0+git20130606+c5d897a.origsurface_flinger_compatibility_layer_internal.h
    struct SfClient
    {
     android::sp<android::SurfaceComposerClient> client;
     EGLDisplay egl_display;
     EGLConfig egl_config;
     EGLContext egl_context;
     bool egl_support;
    };
    F:linuxphablet-ubuntu-20130618frameworks ativelibsguiSurfaceComposerClient.cpp
    sp<SurfaceControl> SurfaceComposerClient::createSurface(
            const String8& name,
            uint32_t w,
            uint32_t h,
            PixelFormat format,
            uint32_t flags)
    {
        sp<SurfaceControl> result;
        if (mStatus == NO_ERROR) {
            ISurfaceComposerClient::surface_data_t data;
            sp<ISurface> surface = mClient->createSurface(&data, name,
                    w, h, format, flags);
            if (surface != 0) {
                result = new SurfaceControl(this, surface, data);
            }
        }
        return result;
    }
    void SurfaceComposerClient::onFirstRef() {
        sp<ISurfaceComposer> sm(ComposerService::getComposerService());
        if (sm != 0) {
            sp<ISurfaceComposerClient> conn = sm->createConnection();
            if (conn != 0) {
                mClient = conn;
                mStatus = NO_ERROR;
            }
        }
    }
    F:linuxphablet-ubuntu-20130618frameworks ativeincludeinderBinder.h
    class BpRefBase : public virtual RefBase
    {
        inline  IBinder*        remote()                { return mRemote; }
        inline  IBinder*        remote() const          { return mRemote; }
    ******************************
    http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html
    http://blog.csdn.net/myarrow/article/details/7180561
    F:linuxphablet-ubuntu-20130618frameworks ativelibsguiISurfaceComposerClient.cpp
    class BpSurfaceComposerClient : public BpInterface<ISurfaceComposerClient>
    {
        virtual sp<ISurface> createSurface( surface_data_t* params,
                                            const String8& name,
                                            uint32_t w,
                                            uint32_t h,
                                            PixelFormat format,
                                            uint32_t flags)
        {
            remote()->transact(CREATE_SURFACE, data, &reply);
    status_t BnSurfaceComposerClient::onTransact(
        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
    {
                sp<ISurface> s = createSurface(&params, name, w, h,
                        format, flags);
    f:linuxphablet-ubuntu-20130618frameworks ativeservicessurfaceflingerClient.cpp
    sp<ISurface> Client::createSurface(
            ISurfaceComposerClient::surface_data_t* params,
            const String8& name,
            uint32_t w, uint32_t h, PixelFormat format,
            uint32_t flags)
    {
        mFlinger->postMessageSync(msg);  //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativeservicessurfaceflingerSurfaceFlinger.cpp
    status_t SurfaceFlinger::postMessageSync(const sp<MessageBase>& msg,
            nsecs_t reltime, uint32_t flags) {
        status_t res = mEventQueue.postMessage(msg, reltime);
        if (res == NO_ERROR) {
            msg->wait();   //segfault
        }
        return res;
    }
    sp<ISurface> SurfaceFlinger::createLayer(
            ISurfaceComposerClient::surface_data_t* params,
            const String8& name,
            const sp<Client>& client,
           uint32_t w, uint32_t h, PixelFormat format,
            uint32_t flags)
    {
        switch (flags & ISurfaceComposerClient::eFXSurfaceMask) {
            case ISurfaceComposerClient::eFXSurfaceNormal:
                layer = createNormalLayer(client, w, h, flags, format);  //segfault
                break;
    sp<Layer> SurfaceFlinger::createNormalLayer(
            const sp<Client>& client,
            uint32_t w, uint32_t h, uint32_t flags,
            PixelFormat& format)
    {
     sp<Layer> layer = new Layer(this, client);  //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativeservicessurfaceflingerLayer.cpp
    void Layer::onFirstRef()
    {
        // Creates a custom BufferQueue for SurfaceTexture to use
        sp<BufferQueue> bq = new SurfaceTextureLayer();  //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsguiBufferQueue.cpp
    BufferQueue::BufferQueue(bool allowSynchronousMode,
            const sp<IGraphicBufferAlloc>& allocator) :
        mDefaultWidth(1),
        mDefaultHeight(1),
        mMaxAcquiredBufferCount(1),
        mDefaultMaxBufferCount(2),
        mOverrideMaxBufferCount(0),
        mSynchronousMode(false),
        mAllowSynchronousMode(allowSynchronousMode),
        mConnectedApi(NO_CONNECTED_API),
        mAbandoned(false),
        mFrameCounter(0),
        mBufferHasBeenQueued(false),
        mDefaultBufferFormat(PIXEL_FORMAT_RGBA_8888),
        mConsumerUsageBits(0),
        mTransformHint(0)
    {
            sp<ISurfaceComposer> composer(ComposerService::getComposerService());  //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsguiSurfaceComposerClient.cpp
    /*static*/ sp<ISurfaceComposer> ComposerService::getComposerService() {
     ALOGD("ComposerService::getComposerService");
        ComposerService& instance = ComposerService::getInstance();  //segfault
    F:linuxphablet-ubuntu-20130618frameworks ativeincludeprivateguiComposerService.h
    frameworks/base/include/utils/Singleton.h
    ANDROID_SINGLETON_STATIC_INSTANCE(ComposerService);
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsguiSurfaceComposerClient.cpp
    ComposerService::ComposerService()
    : Singleton<ComposerService>() {
        Mutex::Autolock _l(mLock);
        connectLocked();  //segfault
    void ComposerService::connectLocked() {
        const String16 name("SurfaceFlinger");
        while (getService(name, &mComposerService) != NO_ERROR) {   //segfault
            usleep(250000);
        }
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativeincludeinderIServiceManager.h
    template<typename INTERFACE>
    status_t getService(const String16& name, sp<INTERFACE>* outService)
    {
            *outService = interface_cast<INTERFACE>(sm->getService(name));     //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsinderIServiceManager.cpp
    class BpServiceManager : public BpInterface<IServiceManager>
    {
        virtual sp<IBinder> getService(const String16& name) const
        {
                sp<IBinder> svc = checkService(name);  //segfault
        virtual sp<IBinder> checkService( const String16& name) const
        {
            remote()->transact(CHECK_SERVICE_TRANSACTION, data, &reply);     //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsinderBpBinder.cpp
    status_t BpBinder::transact(
        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
    {
            status_t status = IPCThreadState::self()->transact(
                mHandle, code, data, reply, flags);                 //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsinderIPCThreadState.cpp
    status_t IPCThreadState::transact(int32_t handle,
                                      uint32_t code, const Parcel& data,
                                      Parcel* reply, uint32_t flags)
    {
            err = writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL);     //segfault
    status_t IPCThreadState::writeTransactionData(int32_t cmd, uint32_t binderFlags,
        int32_t handle, uint32_t code, const Parcel& data, status_t* statusBuffer)
    {
        mOut.writeInt32(cmd);           //segfault
    \192.168.1.1011 ouchexportphablet-ubuntu-20130618frameworks ativelibsinderParcel.cpp
    template<class T>
    status_t Parcel::writeAligned(T val) {
     if ((mDataPos+sizeof(val)) <= mDataCapacity) {
    restart_write:
            *reinterpret_cast<T*>(mData+mDataPos) = val;          //segfault
     


    f:linuxphablet-ubuntu-20130618frameworks ativeservicessurfaceflingerClient.h
    class Client : public BnSurfaceComposerClient
    {
        // ISurfaceComposerClient interface
        virtual sp<ISurface> createSurface(
                surface_data_t* params, const String8& name,
                uint32_t w, uint32_t h,PixelFormat format,
                uint32_t flags);
    f:linuxphablet-ubuntu-20130618frameworks ativeincludeinderBpBinder.h
    F:linuxphablet-ubuntu-20130618frameworks ativelibsinderBpBinder.cpp
    status_t BpBinder::transact(
        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
    {
            status_t status = IPCThreadState::self()->transact(
                mHandle, code, data, reply, flags);
    F:linuxphablet-ubuntu-20130618frameworks ativelibsinderIPCThreadState.cpp
    status_t IPCThreadState::transact(int32_t handle,
                                      uint32_t code, const Parcel& data,
                                      Parcel* reply, uint32_t flags)
    {
            err = writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL);
    status_t IPCThreadState::writeTransactionData(int32_t cmd, uint32_t binderFlags,
        int32_t handle, uint32_t code, const Parcel& data, status_t* statusBuffer)
    {
        mOut.writeInt32(cmd);
        mOut.write(&tr, sizeof(tr));
    F:linuxphablet-ubuntu-20130618frameworks ativelibsinderParcel.cpp
    status_t Parcel::writeInt32(int32_t val)
    {
        return writeAligned(val);
    }
    status_t Parcel::writeAligned(T val) {

  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/aukle/p/3228502.html
Copyright © 2011-2022 走看看