Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbd4c5fe authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "revert hwcomposer HAL changes. DO NOT MERGE." into gingerbread

parents 36cb115c 000ca8fa
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -5,7 +5,6 @@ LOCAL_SRC_FILES:= \
    clz.cpp.arm \
    clz.cpp.arm \
    DisplayHardware/DisplayHardware.cpp \
    DisplayHardware/DisplayHardware.cpp \
    DisplayHardware/DisplayHardwareBase.cpp \
    DisplayHardware/DisplayHardwareBase.cpp \
    DisplayHardware/HWComposer.cpp \
    BlurFilter.cpp.arm \
    BlurFilter.cpp.arm \
    GLExtensions.cpp \
    GLExtensions.cpp \
    Layer.cpp \
    Layer.cpp \
+3 −19
Original line number Original line Diff line number Diff line
@@ -36,11 +36,11 @@


#include "DisplayHardware/DisplayHardware.h"
#include "DisplayHardware/DisplayHardware.h"


#include <hardware/copybit.h>
#include <hardware/overlay.h>
#include <hardware/overlay.h>
#include <hardware/gralloc.h>
#include <hardware/gralloc.h>


#include "GLExtensions.h"
#include "GLExtensions.h"
#include "HWComposer.h"


using namespace android;
using namespace android;


@@ -76,7 +76,7 @@ DisplayHardware::DisplayHardware(
        const sp<SurfaceFlinger>& flinger,
        const sp<SurfaceFlinger>& flinger,
        uint32_t dpy)
        uint32_t dpy)
    : DisplayHardwareBase(flinger, dpy),
    : DisplayHardwareBase(flinger, dpy),
      mFlags(0), mHwc(0)
      mFlags(0)
{
{
    init(dpy);
    init(dpy);
}
}
@@ -262,17 +262,6 @@ void DisplayHardware::init(uint32_t dpy)


    // Unbind the context from this thread
    // Unbind the context from this thread
    eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);


    // initialize the H/W composer
    mHwc = new HWComposer();
    if (mHwc->initCheck() == NO_ERROR) {
        mHwc->setFrameBuffer(mDisplay, mSurface);
    }
}

HWComposer& DisplayHardware::getHwComposer() const {
    return *mHwc;
}
}


/*
/*
@@ -328,12 +317,7 @@ void DisplayHardware::flip(const Region& dirty) const
    }
    }
    
    
    mPageFlipCount++;
    mPageFlipCount++;

    if (mHwc->initCheck() == NO_ERROR) {
        mHwc->commit();
    } else {
    eglSwapBuffers(dpy, surface);
    eglSwapBuffers(dpy, surface);
    }
    checkEGLErrors("eglSwapBuffers");
    checkEGLErrors("eglSwapBuffers");


    // for debugging
    // for debugging
+2 −6
Original line number Original line Diff line number Diff line
@@ -34,11 +34,12 @@
#include "DisplayHardware/DisplayHardwareBase.h"
#include "DisplayHardware/DisplayHardwareBase.h"


struct overlay_control_device_t;
struct overlay_control_device_t;
struct framebuffer_device_t;
struct copybit_image_t;


namespace android {
namespace android {


class FramebufferNativeWindow;
class FramebufferNativeWindow;
class HWComposer;


class DisplayHardware : public DisplayHardwareBase
class DisplayHardware : public DisplayHardwareBase
{
{
@@ -80,9 +81,6 @@ public:
    EGLDisplay getEGLDisplay() const { return mDisplay; }
    EGLDisplay getEGLDisplay() const { return mDisplay; }
    overlay_control_device_t* getOverlayEngine() const { return mOverlayEngine; }
    overlay_control_device_t* getOverlayEngine() const { return mOverlayEngine; }
    
    
    // Hardware Composer
    HWComposer& getHwComposer() const;
    
    status_t compositionComplete() const;
    status_t compositionComplete() const;
    
    
    Rect bounds() const {
    Rect bounds() const {
@@ -109,8 +107,6 @@ private:
    GLint           mMaxViewportDims;
    GLint           mMaxViewportDims;
    GLint           mMaxTextureSize;
    GLint           mMaxTextureSize;
    
    
    HWComposer*     mHwc;

    sp<FramebufferNativeWindow> mNativeWindow;
    sp<FramebufferNativeWindow> mNativeWindow;
    overlay_control_device_t* mOverlayEngine;
    overlay_control_device_t* mOverlayEngine;
};
};
+0 −99
Original line number Original line Diff line number Diff line
/*
 * 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.
 */

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

#include <utils/Errors.h>

#include <hardware/hardware.h>

#include <cutils/log.h>

#include <EGL/egl.h>

#include "HWComposer.h"

namespace android {
// ---------------------------------------------------------------------------

HWComposer::HWComposer()
    : mModule(0), mHwc(0), mList(0), mCapacity(0),
      mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE)
{
    int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule);
    LOGW_IF(err, "%s module not found", HWC_HARDWARE_MODULE_ID);
    if (err == 0) {
        err = hwc_open(mModule, &mHwc);
        LOGE_IF(err, "%s device failed to initialize (%s)",
                HWC_HARDWARE_COMPOSER, strerror(-err));
    }
}

HWComposer::~HWComposer() {
    free(mList);
    if (mHwc) {
        hwc_close(mHwc);
    }
}

status_t HWComposer::initCheck() const {
    return mHwc ? NO_ERROR : NO_INIT;
}

void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
    mDpy = (hwc_display_t)dpy;
    mSur = (hwc_surface_t)sur;
}

status_t HWComposer::createWorkList(size_t numLayers) {
    if (mHwc) {
        if (!mList || mCapacity < numLayers) {
            free(mList);
            size_t size = sizeof(hwc_layer_list) + numLayers*sizeof(hwc_layer_t);
            mList = (hwc_layer_list_t*)malloc(size);
            mCapacity = numLayers;
        }
        mList->flags = HWC_GEOMETRY_CHANGED;
        mList->numHwLayers = numLayers;
    }
    return NO_ERROR;
}

status_t HWComposer::prepare() const {
    int err = mHwc->prepare(mHwc, mList);
    return (status_t)err;
}

status_t HWComposer::commit() const {
    int err = mHwc->set(mHwc, mDpy, mSur, mList);
    mList->flags &= ~HWC_GEOMETRY_CHANGED;
    return (status_t)err;
}

size_t HWComposer::getNumLayers() const {
    return mList ? mList->numHwLayers : 0;
}

hwc_layer_t* HWComposer::getLayers() const {
    return mList ? mList->hwLayers : 0;
}

// ---------------------------------------------------------------------------
}; // namespace android
+0 −68
Original line number Original line Diff line number Diff line
/*
 * 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_SF_HWCOMPOSER_H
#define ANDROID_SF_HWCOMPOSER_H

#include <stdint.h>
#include <sys/types.h>

#include <EGL/egl.h>

#include <hardware/hwcomposer.h>

namespace android {
// ---------------------------------------------------------------------------

class HWComposer
{
public:

    HWComposer();
    ~HWComposer();

    status_t initCheck() const;

    // tells the HAL what the framebuffer is
    void setFrameBuffer(EGLDisplay dpy, EGLSurface sur);

    // create a work list for numLayers layer
    status_t createWorkList(size_t numLayers);

    // Asks the HAL what it can do
    status_t prepare() const;

    // commits the list
    status_t commit() const;


    size_t getNumLayers() const;
    hwc_layer_t* getLayers() const;

private:
    hw_module_t const*      mModule;
    hwc_composer_device_t*  mHwc;
    hwc_layer_list_t*       mList;
    size_t                  mCapacity;
    hwc_display_t           mDpy;
    hwc_surface_t           mSur;
};


// ---------------------------------------------------------------------------
}; // namespace android

#endif // ANDROID_SF_HWCOMPOSER_H
Loading