[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin.spec
^
|
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend.cpp
^
|
@@ -39,6 +39,8 @@
**
****************************************************************************/
+#include <dlfcn.h>
+
#include "hwcomposer_backend.h"
#ifdef HWC_DEVICE_API_VERSION_0_1
#include "hwcomposer_backend_v0.h"
@@ -47,13 +49,21 @@
#include "hwcomposer_backend_v11.h"
-HwComposerBackend::HwComposerBackend(hw_module_t *hwc_module)
- : hwc_module(hwc_module)
+extern "C" void *android_dlopen(const char *filename, int flags);
+extern "C" void *android_dlsym(void *handle, const char *symbol);
+extern "C" int android_dlclose(void *handle);
+
+HwComposerBackend::HwComposerBackend(hw_module_t *hwc_module, void *libmsf)
+ : hwc_module(hwc_module), libminisf(libmsf)
{
}
HwComposerBackend::~HwComposerBackend()
{
+ if (libminisf) {
+ android_dlclose(libminisf);
+ }
+
// XXX: Close/free hwc_module?
}
@@ -62,6 +72,8 @@
{
hw_module_t *hwc_module = NULL;
hw_device_t *hwc_device = NULL;
+ void *libminisf;
+ void (*startMiniSurfaceFlinger)(void) = NULL;
// Some implementations insist on having the framebuffer module opened before loading
// the hardware composer one. Therefor we rely on using the fbdev HYBRIS_EGLPLATFORM
@@ -70,6 +82,24 @@
eglGetDisplay(EGL_DEFAULT_DISPLAY);
}
+ // A reason for calling this method here is to initialize the binder
+ // thread pool such that services started from for example the
+ // hwcomposer plugin don't get stuck.
+ // Another is to have the SurfaceFlinger service in the same process
+ // as hwcomposer, on some devices this could improve performance.
+
+ libminisf = android_dlopen("libminisf.so", RTLD_LAZY);
+
+ if (libminisf) {
+ startMiniSurfaceFlinger = (void(*)(void))android_dlsym(libminisf, "startMiniSurfaceFlinger");
+ }
+
+ if (startMiniSurfaceFlinger) {
+ startMiniSurfaceFlinger();
+ } else {
+ fprintf(stderr, "libminisf is incompatible or missing. Can not possibly start the SurfaceFlinger service. If you're experiencing troubles with media try updating droidmedia (and/or this plugin).");
+ }
+
// Open hardware composer
HWC_PLUGIN_ASSERT_ZERO(hw_get_module(HWC_HARDWARE_MODULE_ID, (const hw_module_t **)(&hwc_module)));
@@ -99,7 +129,7 @@
if ((hwc_device->version == HWC_DEVICE_API_VERSION_0_1) ||
(hwc_device->version == HWC_DEVICE_API_VERSION_0_2) ||
(hwc_device->version == HWC_DEVICE_API_VERSION_0_3)) {
- return new HwComposerBackend_v0(hwc_module, hwc_device);
+ return new HwComposerBackend_v0(hwc_module, hwc_device, libminisf);
}
#endif
@@ -109,12 +139,12 @@
case HWC_DEVICE_API_VERSION_0_1:
case HWC_DEVICE_API_VERSION_0_2:
case HWC_DEVICE_API_VERSION_0_3:
- return new HwComposerBackend_v0(hwc_module, hwc_device);
+ return new HwComposerBackend_v0(hwc_module, hwc_device, libminisf);
break;
#endif
#ifdef HWC_DEVICE_API_VERSION_1_0
case HWC_DEVICE_API_VERSION_1_0:
- return new HwComposerBackend_v10(hwc_module, hwc_device);
+ return new HwComposerBackend_v10(hwc_module, hwc_device, libminisf);
break;
#endif /* HWC_DEVICE_API_VERSION_1_0 */
#ifdef HWC_PLUGIN_HAVE_HWCOMPOSER1_API
@@ -133,7 +163,7 @@
#endif
// HWC_NUM_DISPLAY_TYPES is the actual size of the array, otherwise
// underrun/overruns happen
- return new HwComposerBackend_v11(hwc_module, hwc_device, HWC_NUM_DISPLAY_TYPES);
+ return new HwComposerBackend_v11(hwc_module, hwc_device, libminisf, HWC_NUM_DISPLAY_TYPES);
break;
#endif /* HWC_PLUGIN_HAVE_HWCOMPOSER1_API */
default:
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend.h
^
|
@@ -112,10 +112,11 @@
virtual bool requestUpdate(QEglFSWindow *) { return false; }
protected:
- HwComposerBackend(hw_module_t *hwc_module);
+ HwComposerBackend(hw_module_t *hwc_module, void *libmsf);
virtual ~HwComposerBackend();
hw_module_t *hwc_module;
+ void *libminisf;
};
#endif /* HWCOMPOSER_BACKEND_H */
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v0.cpp
^
|
@@ -44,8 +44,8 @@
#ifdef HWC_DEVICE_API_VERSION_0_1
-HwComposerBackend_v0::HwComposerBackend_v0(hw_module_t *hwc_module, hw_device_t *hw_device)
- : HwComposerBackend(hwc_module)
+HwComposerBackend_v0::HwComposerBackend_v0(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf)
+ : HwComposerBackend(hwc_module, libminisf)
, hwc_device((hwc_composer_device_t *)hw_device)
, hwc_layer_list(NULL)
{
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v0.h
^
|
@@ -47,7 +47,7 @@
class HwComposerBackend_v0 : public HwComposerBackend {
public:
- HwComposerBackend_v0(hw_module_t *hwc_module, hw_device_t *hw_device);
+ HwComposerBackend_v0(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf);
virtual ~HwComposerBackend_v0();
virtual EGLNativeDisplayType display();
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v10.cpp
^
|
@@ -132,8 +132,8 @@
};
-HwComposerBackend_v10::HwComposerBackend_v10(hw_module_t *hwc_module, hw_device_t *hw_device)
- : HwComposerBackend(hwc_module)
+HwComposerBackend_v10::HwComposerBackend_v10(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf)
+ : HwComposerBackend(hwc_module, libminisf)
, hwc_device((hwc_composer_device_1_t *)hw_device)
, hwc_list(NULL)
, hwc_mList(NULL)
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v10.h
^
|
@@ -51,7 +51,7 @@
class HwComposerBackend_v10 : public HwComposerBackend {
public:
- HwComposerBackend_v10(hw_module_t *hwc_module, hw_device_t *hw_device);
+ HwComposerBackend_v10(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf);
virtual ~HwComposerBackend_v10();
virtual EGLNativeDisplayType display();
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v11.cpp
^
|
@@ -53,7 +53,6 @@
#ifdef HWC_PLUGIN_HAVE_HWCOMPOSER1_API
// #define QPA_HWC_TIMING
-// #define QPA_HWC_SYNC_BEFORE_SET
#ifdef QPA_HWC_TIMING
#define QPA_HWC_TIMING_SAMPLE(variable) variable = timer.nsecsElapsed()
@@ -99,6 +98,7 @@
hwc_composer_device_1_t *hwcdevice;
hwc_display_contents_1_t **mlist;
int num_displays;
+ bool m_syncBeforeSet;
protected:
void present(HWComposerNativeWindowBuffer *buffer);
@@ -121,6 +121,7 @@
{
int bufferCount = qBound(2, qgetenv("QPA_HWC_BUFFER_COUNT").toInt(), 8);
setBufferCount(bufferCount);
+ m_syncBeforeSet = qEnvironmentVariableIsSet("QPA_HWC_SYNC_BEFORE_SET");
}
void HWComposer::present(HWComposerNativeWindowBuffer *buffer)
@@ -132,16 +133,16 @@
fblayer->handle = buffer->handle;
fblayer->releaseFenceFd = -1;
-#ifdef QPA_HWC_SYNC_BEFORE_SET
- int acqFd = getFenceBufferFd(buffer);
- if (acqFd >= 0) {
- sync_wait(acqFd, -1);
- close(acqFd);
- fblayer->acquireFenceFd = -1;
+ if (m_syncBeforeSet) {
+ int acqFd = getFenceBufferFd(buffer);
+ if (acqFd >= 0) {
+ sync_wait(acqFd, -1);
+ close(acqFd);
+ fblayer->acquireFenceFd = -1;
+ }
+ } else {
+ fblayer->acquireFenceFd = getFenceBufferFd(buffer);
}
-#else
- fblayer->acquireFenceFd = getFenceBufferFd(buffer);
-#endif
QPA_HWC_TIMING_SAMPLE(syncTime);
@@ -165,8 +166,8 @@
}
}
-HwComposerBackend_v11::HwComposerBackend_v11(hw_module_t *hwc_module, hw_device_t *hw_device, int num_displays)
- : HwComposerBackend(hwc_module)
+HwComposerBackend_v11::HwComposerBackend_v11(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf, int num_displays)
+ : HwComposerBackend(hwc_module, libminisf)
, hwc_device((hwc_composer_device_1_t *)hw_device)
, hwc_list(NULL)
, hwc_mList(NULL)
|
[-]
[+]
|
Changed |
_service:tar_git:qt5-qpa-hwcomposer-plugin-5.6.2.3.tar.bz2/hwcomposer/hwcomposer_backend_v11.h
^
|
@@ -56,7 +56,7 @@
class HwComposerBackend_v11 : public QObject, public HwComposerBackend {
public:
- HwComposerBackend_v11(hw_module_t *hwc_module, hw_device_t *hw_device, int num_displays);
+ HwComposerBackend_v11(hw_module_t *hwc_module, hw_device_t *hw_device, void *libminisf, int num_displays);
virtual ~HwComposerBackend_v11();
virtual EGLNativeDisplayType display();
|