Skip to content
Snippets Groups Projects
  1. May 21, 2014
  2. May 19, 2014
  3. May 12, 2014
    • Kristian Høgsberg's avatar
      configure.ac: Bump version 1.4.93 · 70989484
      Kristian Høgsberg authored
      This is the last RC before 1.5.
      70989484
    • Ander Conselvan de Oliveira's avatar
      window: Ignore input events from subsurfaces · a57c9f1b
      Ander Conselvan de Oliveira authored
      Toytoolkit was not designed to handle input from subsurfaces and
      instead it expects subsurfaces to have an empty input region. That way
      input events for subsurfaces are generated on the main surface and
      there is no need to convert coordinates before reporting the event to
      the user.
      
      However it is possible that a subsurface has a non-empty input region,
      but in that case those events aren't properly processed. The function
      window_find_widget() assumes the coordinates are in the main surface
      coordinate space, and ends up chosing the wrong widget.
      
      This patch changes the input code to completely ignore input events from
      subsurfaces. This option was chosen instead of ensuring that the input
      region on those surfaces is always empty since there's no enforcement
      that a subsurface should completely overlap with the main surface. If
      an event happens in the area of the surface that doesn't overlap, the
      event could cause a completely unrelated surface to be picked.
      
      https://bugs.freedesktop.org/show_bug.cgi?id=78207
      a57c9f1b
    • Pekka Paalanen's avatar
      build: let 'make clean' remove logs/ again · 15f85635
      Pekka Paalanen authored
      
      Before in the recursive automake setting, we had tests/logs/ for
      explicitly created test log files. There is a Makefile rule to
      remove the logs directory on 'make clean'. The rule broke on moving to
      non-recursive make, since now we have logs/, not tests/logs/.
      
      Fix the rule to remove the intended directory.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      15f85635
    • Bryce W. Harrington's avatar
      gitignore log files, now in root directory · 2f88f0be
      Bryce W. Harrington authored
      
      [paalanen: added also *.trs to ignore]
      
      Signed-off-by: default avatarBryce Harrington <b.harrington@samsung.com>
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      2f88f0be
    • Jonas Ådahl's avatar
      desktop-shell: Fix order of desktop_shell messages · 9b059099
      Jonas Ådahl authored
      
      There was a bug in wayland-scanner that failed to detect when an
      message with implicitly set version (i.e. version 1) came after a
      message with a newer version. This patch fixes the weston desktop shell
      protocol to pass again.
      
      Signed-off-by: default avatarJonas Ådahl <jadahl@gmail.com>
      9b059099
    • Pekka Paalanen's avatar
      squash to 'presentation clock everywhere': rpi debug build fix · 7e78bab5
      Pekka Paalanen authored
      Fix build when rpi debugging enabled.
      7e78bab5
    • Pekka Paalanen's avatar
      squash to queue: discard queue on wl_surface destruction · cf9c3fde
      Pekka Paalanen authored
      If Weston keeps the surface itself alive after the protocol object is
      gone, the queue was still there, pushing updates to the surface with
      destroyed wl_buffers, i.e. basically attaching NULL buffers. Just
      discard the queue when the client destroys the surface object.
      cf9c3fde
    • Pekka Paalanen's avatar
      squash to queue: fix NULL attach via queue · f880e949
      Pekka Paalanen authored
      When a client goes away, all wl_buffer objects get destroyed. The
      weston_surface will stay around for the closing animation, and so the
      queue survives, too. The queue will then produce a NULL attach, which
      unmaps the surface.
      
      A client could also deliberately queue a NULL wl_buffer.
      
      Therefore weston_surface_queue_process() may unmap the current surface
      and all its views.
      f880e949
    • Pekka Paalanen's avatar
      squash: separate process_surfaces function · 77fbc22a
      Pekka Paalanen authored
      just refactoring
      77fbc22a
    • Pekka Paalanen's avatar
      compositor: add presentation debug functions · 81ba02b6
      Pekka Paalanen authored
      
      These are to be enabled by a developer as needed. They helped to track
      down a problem, where the prediction was deemed practically perfect but
      feedback was sent on the frame after, leading to incorrect feedback that
      looked like all queued updates were always one frame late.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      81ba02b6
    • Pekka Paalanen's avatar
      clients: add presentation-shm demo · 5db3a426
      Pekka Paalanen authored
      
      This started as a copy of simple-shm.c before it was converted to
      xdg_shell.
      
      This demo excercises the presentation feedback interface in three
      different mode:
      
      - A continuous repaint loop triggered by frame callbacks, and using
        immediate commits, just gathering presentation feedback and computing
        some time intervals for statistics.
      
      - A burst mode, where it queues around 60 frames, and manages to sleep
        without any Wayland protocol traffic for around 1 second on a 60 Hz
        display while still animating continuously, until it needs to send
        the next burst.
      
      - A burst mode with presentation feedback for every frame.
      
      In all modes, all frames are pre-rendered at startup, so no rendering
      happens during the animation.
      
      By default, queueing the frames happens in random order, to test the
      compositor's ability to order queued updates by the timestamp.
      
      The target timestamps for queued frames are produced by a trivial
      algorithm, without any attempt to explicitly and quickly synchronize to
      the refresh cycle.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      5db3a426
    • Pekka Paalanen's avatar
      compositor: implement presentation.queue · d5f44271
      Pekka Paalanen authored
      
      Implement the queueing and queue processing of the Presentation
      extension.
      
      Every weston_surface (wl_surface) has a queue_list, which is ordered by
      the target presentation timestamp of the queued updates. A
      wl_surface.commit following a presentation.queue will trigger queueing
      instead of a normal commit.
      
      The buffer_viewport handling is changed to match the Presentation
      specification.
      
      In output repaint, the compositor predicts when the current repaint
      would hit the screen, based on the previous repaint's timestamp.
      The DRM vblank events carry a timestamp for the start of the active
      period, but they can be emitted earlier. This can make it look like the
      previous presentation finished in the future. This is dealt with by
      using proper rounding, and allowing timestamps that are at most 1 cycle
      in the future in weston_output_predict_presentation.
      
      The weston_surface::queue_list is processed during output repaint if the
      weston_surface's main output is the one being repainted. An update from
      the queue is applied according to the target timestamp, and earlier
      updates are discarded.
      
      The compositor will keep on repainting if there are any queued updates
      still existing in the weston_surfaces that have been processed by output
      repaint. Surfaces that are not part of the repaint will not
      automatically schedule a new repaint based on the queue; instead it is
      assumed that a repaint is scheduled when such a surface enters the
      repainted set of surfaces. A client queueing an update will also cause a
      repaint to be scheduled, to ensure the queue will get processed if the
      surface is on an output.
      
      As the realized presentation timestamp is available only after output
      repaint, updating all relevant surface timestamps would require a
      per-output list of weston_surfaces. Instead, weston_surfaces hold a
      reference to a weston_timestamp, which then gets the realized
      presentation timestamp in finish_frame(). The surface's
      presentation_time is used to discard queued updates that would replace
      the current content with an older content.
      
      Frame callbacks are not queued. A queueing commit does not touch any
      pending frame callbacks.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      d5f44271
    • Pekka Paalanen's avatar
      compositor-drm: deliver frame seq for feedback · 2fe5b4b4
      Pekka Paalanen authored
      
      Add 'msc' field to weston_output to maintain the refresh counter, and
      use it in presentation_feedback.presented.
      
      Make compositor-drm update the per-output refresh counter with the
      values reported by DRM. If the DRM reported value jumps backwards,
      assume it wrapped around once.
      
      Other backends do not update weston_output::msc, and there
      presentation_feedback will always deliver refresh counter as zero.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      2fe5b4b4
    • Pekka Paalanen's avatar
      compositor: implement presentation_feedback · b4a48f52
      Pekka Paalanen authored
      
      Implement the presentation.feedback request, and the
      presentation_feedback protocol interface. Feedback information is
      delivered to clients as the backend reports it, except the refresh
      counter (MSC) which is always reported as zero.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      b4a48f52
    • Pekka Paalanen's avatar
      compositor: set and use the presentation clock everywhere · 05016450
      Pekka Paalanen authored
      
      Add presentation clock setters that verify the given clock actually
      works. Offer an automatic choice of a software fallback clock, when a
      backend has to always use clock_gettime() to approximate the
      presentation time.
      
      The DRM backend already queried the DRM about the clock id, just let the
      DRM backend set the presentation clock from that.
      
      For all other backends which do not get a timestamp from the driver,
      call the software clock setter to choose a suitable clock.
      
      Report the chosen clock via presentation.clock_id event to clients.
      
      In finish_frame(), upgrade the argument from uint32_t milliseconds to
      struct timespec which can accurately hold the presentation clock values.
      This will be needed when weston_output_finish_frame() starts to send out
      presentation_feedback.presented events.
      
      While at it, replace gettimeofday() calls with clock_gettime() using the
      chosen presentation clock, so we manufacture presentation timestamps
      from the presentation clock when the gfx drivers cannot give us a proper
      timestamp.
      
      Rpi patch is more verbose due to not having the compositor pointer
      available in rpi_flippipe_update_complete(). Explicitly carry the clock
      id with flippipe so it is available in the thread.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      05016450
    • Pekka Paalanen's avatar
    • Pekka Paalanen's avatar
      compositor: add stub implementation of presentation interface · 4be5f37d
      Pekka Paalanen authored
      
      You can bind to the global interface, and it delivers a fake clock id.
      All requests on it raise an error.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      4be5f37d
    • Pekka Paalanen's avatar
      protocol: add presentation extension RFC v3 · cc826ee8
      Pekka Paalanen authored
      Add accurate presentation timing features to Wayland: queueing and
      feedback.
      
      This specification is based on the draft written by Frederic Plourde
      <frederic.plourde@collabora.co.uk> and redesigned by Pekka Paalanen.
      
      The RFC v2 version is from
      http://lists.freedesktop.org/archives/wayland-devel/2014-January/012988.html
      
      Changes in v3:
      
      * associate presentation time to current surface contents
      
      This implements the suggestion from
      http://lists.freedesktop.org/archives/wayland-devel/2014-February/013066.html
      
      
      
      which prevents surface content from jumping backwards in time if a
      client retroactively queues an update with a target time in the past.
      
      * use 64-bit tv_sec in presentation
      
      The time_t type used in struct timespec could be almost anything. POSIX
      probably defines it to be an integer, but not the size. Apparently it is
      usually 'long', which makes it 64-bit on x86_64.
      
      To be able to fully represent timespec values returned by clock_gettime,
      change the protocol to use 64 bits for the tv_sec part.
      
      * define an error for invalid tv_nsec
      
      This allow us to rely on the normalized timestamp form.
      
      * define some interactions with sub-surfaces
      
      Sub-surface cached state updates (synchronized mode) are designed
      especially for resizing. As queued updates are not meant to produce any
      resizing-like effects, they also do not trigger any sub-surface
      operations.
      
      * add sub-headings as xml comments
      
      * queued update cannot map
      
      Because before mapping, the surface has no main output assigned. An
      immediate commit is needed anyway, to be able to set all the surface
      state, which a queued update cannot touch.
      
      * frame callbacks are not queued
      
      It is not known when queueing frame callbacks would be useful.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      v3 Reviewed-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      cc826ee8
    • Pekka Paalanen's avatar
      build: let 'make clean' remove logs/ again · b2f04f83
      Pekka Paalanen authored
      
      Before in the recursive automake setting, we had tests/logs/ for
      explicitly created test log files. There is a Makefile rule to
      remove the logs directory on 'make clean'. The rule broke on moving to
      non-recursive make, since now we have logs/, not tests/logs/.
      
      Fix the rule to remove the intended directory.
      
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      b2f04f83
    • Bryce W. Harrington's avatar
      gitignore log files, now in root directory · daf6f51e
      Bryce W. Harrington authored and Pekka Paalanen's avatar Pekka Paalanen committed
      
      [paalanen: added also *.trs to ignore]
      
      Signed-off-by: default avatarBryce Harrington <b.harrington@samsung.com>
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      daf6f51e
  4. May 09, 2014
  5. May 06, 2014
Loading