0165cb6974
When a client is ready for the compositor to read a surface's shared memory buffer, it tells the compositor via wl_surface_commit. From that point forward, the baton is given to the compositor: it knows it can read the buffer without worring about the client making changes out from under it. After the compositor has uploaded the pixel contents to the video card it is supposed to release the buffer back to the client so that the client can reuse it for future use. At the moment, mutter only releases the buffer when a new buffer is attached. This is problematic, since it means the client has to have a second buffer prepared before the compositor gives the first one back. Preparing the second buffer potentially involves copying megabytes of pixel data, so that's suboptimal, and there's no reason mutter couldn't release the buffer earlier. This commit changes mutter to release a surface's buffer as soon as it's done processing the commit request. https://bugzilla.gnome.org/show_bug.cgi?id=761312
56 lines
2.0 KiB
C
56 lines
2.0 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2014 Endless Mobile
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*
|
|
* Written by:
|
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
|
*/
|
|
|
|
#ifndef META_WAYLAND_BUFFER_H
|
|
#define META_WAYLAND_BUFFER_H
|
|
|
|
#include <cogl/cogl.h>
|
|
#include <cairo.h>
|
|
#include <wayland-server.h>
|
|
|
|
#include "meta-wayland-types.h"
|
|
|
|
struct _MetaWaylandBuffer
|
|
{
|
|
struct wl_resource *resource;
|
|
struct wl_signal destroy_signal;
|
|
struct wl_listener destroy_listener;
|
|
|
|
CoglTexture *texture;
|
|
uint32_t ref_count;
|
|
|
|
uint32_t accessible : 1;
|
|
};
|
|
|
|
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
|
|
void meta_wayland_buffer_ref (MetaWaylandBuffer *buffer);
|
|
void meta_wayland_buffer_unref (MetaWaylandBuffer *buffer);
|
|
void meta_wayland_buffer_take_control (MetaWaylandBuffer *buffer);
|
|
void meta_wayland_buffer_release_control (MetaWaylandBuffer *buffer);
|
|
CoglTexture * meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer);
|
|
void meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer,
|
|
cairo_region_t *region);
|
|
|
|
#endif /* META_WAYLAND_BUFFER_H */
|