Skip to content

Commit ed672ea

Browse files
committed
wpeview: Remove the ScopedFD helper
The buffer release fence in BufferReleasedCallbackData was its only user. Hold the file descriptor as a plain int and close it in the destructor when it has not been handed over to wpe_buffer_set_release_fence(), which also drops the heap allocation per released buffer, and delete the helper.
1 parent cbae741 commit ed672ea

2 files changed

Lines changed: 10 additions & 72 deletions

File tree

wpeview/src/main/cpp/Platform/WPEViewAndroid.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@
1919
#include "WPEViewAndroid.h"
2020

2121
#include "Logging.h"
22-
#include "ScopedFD.h"
2322
#include "WPEToplevelAndroid.h"
2423

2524
#include <android/native_window.h>
2625
#include <android/surface_control.h>
27-
#include <memory>
26+
#include <unistd.h>
2827

2928
struct _WPEViewAndroid {
3029
WPEView parent;
@@ -60,7 +59,8 @@ struct BufferReleasedCallbackData {
6059
WPEView* view;
6160
WPEBuffer* buffer;
6261
ASurfaceControl& surfaceControl;
63-
std::unique_ptr<ScopedFD> releaseFence;
62+
// Previous-buffer release fence, owned until it is handed over to wpe_buffer_set_release_fence().
63+
int releaseFence {-1};
6464

6565
BufferReleasedCallbackData(WPEView* view, WPEBuffer* buffer, ASurfaceControl& surfaceControl)
6666
: view(static_cast<WPEView*>(g_object_ref(view)))
@@ -71,6 +71,8 @@ struct BufferReleasedCallbackData {
7171

7272
~BufferReleasedCallbackData()
7373
{
74+
if (releaseFence != -1)
75+
close(releaseFence);
7476
g_object_unref(view);
7577
g_object_unref(buffer);
7678
}
@@ -92,16 +94,16 @@ static void wpeViewAndroidOnTransactionCommitted(void* context, ASurfaceTransact
9294
static void wpeViewAndroidOnTransactionCompleted(void* context, ASurfaceTransactionStats* stats)
9395
{
9496
auto* data = static_cast<BufferReleasedCallbackData*>(context);
95-
int releaseFenceFD = ASurfaceTransactionStats_getPreviousReleaseFenceFd(stats, &data->surfaceControl);
96-
if (releaseFenceFD != -1)
97-
data->releaseFence = std::make_unique<ScopedFD>(releaseFenceFD);
97+
data->releaseFence = ASurfaceTransactionStats_getPreviousReleaseFenceFd(stats, &data->surfaceControl);
9898

9999
g_main_context_invoke_full(
100100
nullptr, G_PRIORITY_DEFAULT,
101101
+[](gpointer userData) -> gboolean {
102102
auto* data = static_cast<BufferReleasedCallbackData*>(userData);
103-
if (data->releaseFence)
104-
wpe_buffer_set_release_fence(data->buffer, data->releaseFence->release());
103+
if (data->releaseFence != -1) {
104+
wpe_buffer_set_release_fence(data->buffer, data->releaseFence);
105+
data->releaseFence = -1;
106+
}
105107
wpe_view_buffer_released(data->view, data->buffer);
106108
return G_SOURCE_REMOVE;
107109
},

wpeview/src/main/cpp/Runtime/ScopedFD.h

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)