tree: fde49fd7a34d9a5bd7a47adbf213af7282c56ad9 [path history] [tgz]
  1. clients/
  2. compatibility_test/
  3. fuzzer/
  4. protocol/
  5. test/
  6. BUILD.gn
  7. client_tracker.cc
  8. client_tracker.h
  9. client_tracker_unittest.cc
  10. content_type.cc
  11. content_type.h
  12. DEPS
  13. output_configuration_change.cc
  14. output_configuration_change.h
  15. output_controller.cc
  16. output_controller.h
  17. output_controller_test_api.cc
  18. output_controller_test_api.h
  19. output_controller_unittest.cc
  20. output_metrics.cc
  21. output_metrics.h
  22. output_metrics_unittest.cc
  23. overlay_prioritizer.cc
  24. overlay_prioritizer.h
  25. OWNERS
  26. README.md
  27. scoped_wl.cc
  28. scoped_wl.h
  29. serial_tracker.cc
  30. serial_tracker.h
  31. serial_tracker_unittest.cc
  32. server.cc
  33. server.h
  34. server_unittest.cc
  35. server_util.cc
  36. server_util.h
  37. shell_unittest.cc
  38. surface_augmenter.cc
  39. surface_augmenter.h
  40. surface_augmenter_unittest.cc
  41. surface_unittest.cc
  42. wayland_aura_shell_server_test.cc
  43. wayland_display_observer.cc
  44. wayland_display_observer.h
  45. wayland_display_observer_unittest.cc
  46. wayland_display_output.cc
  47. wayland_display_output.h
  48. wayland_display_output_unittest.cc
  49. wayland_display_util.cc
  50. wayland_display_util.h
  51. wayland_display_util_unittest.cc
  52. wayland_dmabuf_feedback_manager.cc
  53. wayland_dmabuf_feedback_manager.h
  54. wayland_input_delegate.cc
  55. wayland_input_delegate.h
  56. wayland_keyboard_delegate.cc
  57. wayland_keyboard_delegate.h
  58. wayland_keyboard_delegate_unittest.cc
  59. wayland_pointer_delegate.cc
  60. wayland_pointer_delegate.h
  61. wayland_positioner.cc
  62. wayland_positioner.h
  63. wayland_positioner_unittest.cc
  64. wayland_protocol_logger.cc
  65. wayland_protocol_logger.h
  66. wayland_protocol_logger_unittest.cc
  67. wayland_touch_delegate.cc
  68. wayland_touch_delegate.h
  69. wayland_watcher.cc
  70. wayland_watcher.h
  71. wl_compositor.cc
  72. wl_compositor.h
  73. wl_data_device_manager.cc
  74. wl_data_device_manager.h
  75. wl_data_device_manager_unittest.cc
  76. wl_output.cc
  77. wl_output.h
  78. wl_seat.cc
  79. wl_seat.h
  80. wl_shell.cc
  81. wl_shell.h
  82. wl_shm.cc
  83. wl_shm.h
  84. wl_subcompositor.cc
  85. wl_subcompositor.h
  86. wp_fractional_scale.cc
  87. wp_fractional_scale.h
  88. wp_presentation.cc
  89. wp_presentation.h
  90. wp_single_pixel_buffer.cc
  91. wp_single_pixel_buffer.h
  92. wp_viewporter.cc
  93. wp_viewporter.h
  94. xdg_shell.cc
  95. xdg_shell.h
  96. zaura_output_manager.cc
  97. zaura_output_manager.h
  98. zaura_output_manager_unittest.cc
  99. zaura_output_manager_v2.cc
  100. zaura_output_manager_v2.h
  101. zaura_output_manager_v2_unittest.cc
  102. zaura_shell.cc
  103. zaura_shell.h
  104. zaura_shell_unittest.cc
  105. zcr_alpha_compositing.cc
  106. zcr_alpha_compositing.h
  107. zcr_color_manager.cc
  108. zcr_color_manager.h
  109. zcr_cursor_shapes.cc
  110. zcr_cursor_shapes.h
  111. zcr_extended_drag.cc
  112. zcr_extended_drag.h
  113. zcr_gaming_input.cc
  114. zcr_gaming_input.h
  115. zcr_keyboard_configuration.cc
  116. zcr_keyboard_configuration.h
  117. zcr_keyboard_extension.cc
  118. zcr_keyboard_extension.h
  119. zcr_notification_shell.cc
  120. zcr_notification_shell.h
  121. zcr_remote_shell.cc
  122. zcr_remote_shell.h
  123. zcr_remote_shell_event_mapping.h
  124. zcr_remote_shell_impl.cc
  125. zcr_remote_shell_impl.h
  126. zcr_remote_shell_impl_unittest.cc
  127. zcr_remote_shell_unittest.cc
  128. zcr_remote_shell_v2.cc
  129. zcr_remote_shell_v2.h
  130. zcr_secure_output.cc
  131. zcr_secure_output.h
  132. zcr_stylus.cc
  133. zcr_stylus.h
  134. zcr_stylus_tools.cc
  135. zcr_stylus_tools.h
  136. zcr_touchpad_haptics.cc
  137. zcr_touchpad_haptics.h
  138. zcr_ui_controls.cc
  139. zcr_ui_controls.h
  140. zcr_ui_controls_stub.cc
  141. zcr_vsync_feedback.cc
  142. zcr_vsync_feedback.h
  143. zwp_idle_inhibit_manager.cc
  144. zwp_idle_inhibit_manager.h
  145. zwp_input_timestamps_manager.cc
  146. zwp_input_timestamps_manager.h
  147. zwp_keyboard_shortcuts_inhibit_manager.cc
  148. zwp_keyboard_shortcuts_inhibit_manager.h
  149. zwp_linux_dmabuf.cc
  150. zwp_linux_dmabuf.h
  151. zwp_linux_explicit_synchronization.cc
  152. zwp_linux_explicit_synchronization.h
  153. zwp_pointer_constraints.cc
  154. zwp_pointer_constraints.h
  155. zwp_pointer_gestures.cc
  156. zwp_pointer_gestures.h
  157. zwp_relative_pointer_manager.cc
  158. zwp_relative_pointer_manager.h
  159. zwp_text_input_manager.cc
  160. zwp_text_input_manager.h
  161. zxdg_decoration_manager.h
  162. zxdg_output_manager.cc
  163. zxdg_output_manager.h
components/exo/wayland/README.md

This directory contains exo-specific extensions to the Wayland protocol.

To begin with, we recommend this link for more about wayland basics. The short summary is that:

  • wl_surface is the compositing window primitive. It is capable of receiving a series of buffers representing contents. It only provides basic functionality. Other functionality like pip/decorations are implemented through extensions.
  • It is possible to extend a wl_surface as xdg_surface via xdg_wm_base.get_surface. This extension is not permanent: it is possible to destroy and/or recreate the xdg_surface.
  • Once an xdg_surface is created, it can be assigned a role: xdg_toplevel or xdg_popup.
  • exo has extensions for each of these primitives that implement aura shell (ash) specific functionalities:
    • wl_surface is extended by zaura_surface
    • xdg_toplevel is extended by zaura_toplevel
    • xdg_popup is extended by zaura_popup

The wayland protocol is used to communicate between ash-chrome (exo/wayland-server) and wayland clients. The lacros-chrome client is version skewed from ash-chrome. As such, the protocol itself must be a stable API surface. This has two main implications:

  1. It is not safe to remove any methods. This includes reverts of CLs that add methods.
  2. The version update must be atomic. No two (or more) CLs should update the protocol file to the same version.

This implication means we need to minimize risk of a) needing to revert CLs that add methods, b) Geritt auto-resolving conflict of two independent CLs that update to the same version, and land them. We thus add the following guidance:

  • When adding a new interface method, create the exo (server) implementation and update its version in its own CL and merge that first.

  • The code should use _SINCE_VERSION macro to specify the version you updated to, e.g.:

      constexpr int kAuraShellVersion = ZAURA_SHELL_WINDOW_CORNERS_RADII_SINCE_VERSION;
    

    This will prevent Geritt from automacially resolving the conflict.

  • Then, in a separate CL, add a stub (empty) implementation on the client (ozone-wayland) side without updating the version. This is to avoid a problem when yet another protocol update is added on the client side while your are working on the client side implementation for your protocol update. If the client side change is simple enough, it's ok to skip to the next step.

  • Finally, in a separate CL, follow up with the client changes that use the interface method. Thus, in the event that usage of the new interface causes bugs, the client-side change can be reverted without modifying the API surface itself.

Note that the following directories contain exo-specific extensions:

  • components/exo/wayland/protocol
  • third_party/wayland-protocols/unstable