add platuml files 87/262787/3
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 17 Aug 2021 05:25:02 +0000 (14:25 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 20 Aug 2021 01:16:27 +0000 (10:16 +0900)
add class and sequence diagrams of pepper

Change-Id: Ie31c045d8b9e5e4fe7f505832f8c40b616bc65b4

doc/plantuml/class-pepper-input.plantuml [new file with mode: 0755]
doc/plantuml/class-pepper.plantuml [new file with mode: 0755]
doc/plantuml/sequence-idle_repaint.plantuml [new file with mode: 0644]
doc/plantuml/sequence-input-send.plantuml [new file with mode: 0755]
doc/plantuml/sequence-input.plantuml [new file with mode: 0755]
doc/plantuml/sequence-output_schedule_repaint.plantuml [new file with mode: 0644]
doc/plantuml/sequence-shell-init.plantuml [new file with mode: 0755]
doc/plantuml/sequence-surface-create.plantuml [new file with mode: 0755]
doc/plantuml/sequence-surface-update.plantuml [new file with mode: 0755]
doc/plantuml/sequence-view-create.plantuml [new file with mode: 0755]
doc/plantuml/sequence-wl_surface_commit.plantuml [new file with mode: 0644]

diff --git a/doc/plantuml/class-pepper-input.plantuml b/doc/plantuml/class-pepper-input.plantuml
new file mode 100755 (executable)
index 0000000..b74732d
--- /dev/null
@@ -0,0 +1,32 @@
+@startuml\r
+class pepper_object_t\r
+class pepper_compositor_t\r
+class pepper_seat_t\r
+class pepper_pointer_t\r
+class pepper_keyboard_t\r
+class pepper_touch_t\r
+class pepper_input_device_t\r
+\r
+pepper_object_t <|-- pepper_compositor_t\r
+pepper_object_t <|-- pepper_seat_t\r
+pepper_object_t <|-- pepper_pointer_t\r
+pepper_object_t <|-- pepper_keyboard_t\r
+pepper_object_t <|-- pepper_touch_t\r
+pepper_object_t <|-- pepper_input_device_t\r
+pepper_input_device_t <|-- X11::pointer\r
+pepper_input_device_t <|-- X11::key\r
+pepper_input_device_t <|-- WAYLAND::pointer\r
+pepper_input_device_t <|-- WAYLAND::key\r
+\r
+pepper_compositor_t "1"*--"*"pepper_seat_t\r
+pepper_seat_t "1"*--"1" pepper_pointer_t\r
+pepper_seat_t "1"*--"1" pepper_keyboard_t\r
+pepper_seat_t "1"*--"1" pepper_touch_t\r
+pepper_seat_t "1"*--"*" wl_resource::wl_seat\r
+pepper_seat_t "1"*--"1" wl_global::wl_seat_interface\r
+pepper_seat_t "1"*--"*" pepper_input_device_t\r
+\r
+pepper_pointer_t "1"*--"*" wl_resource::wl_pointer\r
+pepper_keyboard_t "1"*--"*" wl_resource::wl_keyboard\r
+pepper_touch_t "1"*--"*" wl_resource::wl_touch\r
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/class-pepper.plantuml b/doc/plantuml/class-pepper.plantuml
new file mode 100755 (executable)
index 0000000..1d14606
--- /dev/null
@@ -0,0 +1,121 @@
+@startuml\r
+\r
+class pepper_object_t\r
+class pepper_compositor_t\r
+class pepper_output_t\r
+class pepper_seat_t\r
+class pepper_surface_t\r
+class pepper_buffer_t\r
+class pepper_view_t\r
+\r
+pepper_object_t <|-- pepper_compositor_t\r
+pepper_object_t <|-- pepper_output_t\r
+pepper_object_t <|-- pepper_seat_t\r
+pepper_object_t <|-- pepper_surface_t\r
+pepper_object_t <|-- pepper_buffer_t\r
+pepper_object_t <|-- pepper_view_t\r
+\r
+pepper_compositor_t *-- pepper_seat_t\r
+pepper_compositor_t *-- pepper_output_t\r
+\r
+class pepper_output_backend_t <<interface>> {\r
+ {abstract}destroy(void* output)\r
+\r
+ {abstract}get_subpixel_order()\r
+ {abstract}get_maker_name()\r
+ {abstract}get_model_name()\r
+ {abstract}get_mode_count()\r
+ {abstract}get_mode()\r
+ {abstract}set_mode()\r
+\r
+ {abstract}assign_planes()\r
+ {abstract}repaint()\r
+ {abstract}attach_surface()\r
+ -- listener--\r
+ {abstract}add_destroy_listener()\r
+ {abstract}add_mode_change_listender()\r
+ {abstract}add_frame_listener()\r
+}\r
+pepper_output_t "1" *-- "1" pepper_output_backend_t\r
+\r
+class pepper_drm_output_backend\r
+pepper_output_backend_t <|-- pepper_drm_output_backend : Implementation\r
+\r
+class pepper_fbdev_output_backend\r
+pepper_output_backend_t <|-- pepper_fbdev_output_backend : Implementation\r
+\r
+class pepper_wayland_output_backend\r
+pepper_output_backend_t <|-- pepper_wayland_output_backend : Implementation\r
+\r
+class pepper_x11_output_backend\r
+pepper_output_backend_t <|-- pepper_x11_output_backend : Implementation\r
+\r
+class pepper_renderer_t <<interface>> {\r
+       pepper_compositor_t *compositor\r
+       pepper_render_target_t *target\r
+\r
+       {abstract}destroy()\r
+       {abstract}attach_surface()\r
+       {abstract}flush_surface_damage()\r
+       {abstract}read_pixels()\r
+       {abstract}repaint_output()\r
+}\r
+\r
+class pepper_pixman_renderer\r
+pepper_renderer_t <|-- pepper_pixman_renderer\r
+\r
+class pepper_gl_renderer\r
+pepper_renderer_t <|-- pepper_gl_renderer\r
+\r
+class pepper_render_target_t<<interface>> {\r
+       pepper_renderer_t *renderer\r
+\r
+       {abstract}destroy()\r
+}\r
+pepper_renderer_t "1" -- "1" pepper_render_target_t\r
+\r
+class pepper_pixman_render_target\r
+pepper_render_target_t <|-- pepper_pixman_render_target\r
+pepper_drm_output_backend *-- pepper_pixman_render_target\r
+pepper_fbdev_output_backend *-- pepper_pixman_render_target\r
+pepper_wayland_output_backend *-- pepper_pixman_render_target\r
+pepper_x11_output_backend *-- pepper_pixman_render_target\r
+\r
+class pepper_gl_render_target\r
+pepper_render_target_t <|-- pepper_gl_render_target\r
+pepper_drm_output_backend *-- pepper_gl_render_target\r
+pepper_x11_output_backend *-- pepper_gl_render_target\r
+\r
+class pepper_plane_t {\r
+       pepper_output_t *output\r
+       pixman_region32_t damage_region\r
+       pixman_region32_t clip_region\r
+\r
+       pepper_plane_create()\r
+       pepper_plane_add_damage_region()\r
+       pepper_plane_accumulate_damage()\r
+       pepper_plane_update()\r
+}\r
+\r
+class pepper_drm #PaleGreen {\r
+       pepper_compositor_t *compositor\r
+       wl_list *output_list\r
+       pepper_renderer_t *pixman_renderer\r
+       pepper_renderer_t *gl_renderer\r
+       pepper_list_t plane_list\r
+\r
+       pepper_drm_create()\r
+       pepper_drm_destroy()\r
+}\r
+\r
+pepper_drm *-- pepper_compositor_t\r
+pepper_drm *-- pepper_gl_renderer\r
+pepper_drm *-- pepper_pixman_renderer\r
+\r
+\r
+class pepper_drm_output #PaleGreen\r
+pepper_drm "1" *-- "n" pepper_drm_output\r
+pepper_drm_output *-- pepper_drm_output_backend\r
+pepper_drm_output *-- pepper_plane_t\r
+\r
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-idle_repaint.plantuml b/doc/plantuml/sequence-idle_repaint.plantuml
new file mode 100644 (file)
index 0000000..1761340
--- /dev/null
@@ -0,0 +1,47 @@
+@startuml
+
+title idle_repaint
+
+activate output
+
+       [->output : idle_repaint
+       output->output_backend : output->backend->start_repaint_loop
+       output<-output_backend : pepper_output_finish_frame
+       note right
+               output_backend should call pepper_output_finish_frame
+       endnote
+
+       activate output
+               alt output->frame.scheduled == 1
+                       output->output : output_repaint
+                       loop output->compositor->view_list
+                               output->view : pepper_view_update
+                       end loop
+
+                       output->output : pepper_list_init(output->view_list)
+                       loop output->compositor->view_list
+                               output->output : pepper_list_insert(output->view_list)
+                       end loop
+
+                       output->output_backend : assign_planes
+                       output->output : output_update_planes
+                       output->output_backend : repaint
+
+                       output->output : output->frame.pending = 1
+                       output->output : output->frame.scheduled = 0
+
+                       loop output->view_list
+                               output->surface : pepper_surface_send_frame_callback_done(view->surface)
+                       end loop
+               end alt
+       deactivate output
+
+       activate surface
+               loop surface->frame_callback_list
+                       surface->actor : wl_callback_send_done
+               end loop
+       deactivate surface
+
+deactivate output
+
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-input-send.plantuml b/doc/plantuml/sequence-input-send.plantuml
new file mode 100755 (executable)
index 0000000..8cb75fc
--- /dev/null
@@ -0,0 +1,11 @@
+@startuml\r
+actor client\r
+participant compositor <<pepper>>\r
+participant pepper_seat\r
+participant input_device <<pepper>>\r
+participant input_manager\r
+\r
+input_device <-] : Press_key\r
+input_device ->] : emit PEPPER_EVENT_INPUT_DEVICE_KEYBOARD_KEY\r
+pepper_seat <-] : call callback::PEPPER_EVENT_INPUT_DEVICE_KEYBOARD_KEY\r
+@enduml\r
diff --git a/doc/plantuml/sequence-input.plantuml b/doc/plantuml/sequence-input.plantuml
new file mode 100755 (executable)
index 0000000..0ada126
--- /dev/null
@@ -0,0 +1,64 @@
+@startuml\r
+actor client\r
+participant compositor <<pepper>>\r
+participant pepper_seat\r
+participant input_device <<pepper>>\r
+participant input_manager\r
+\r
+create pepper_seat\r
+compositor -> pepper_seat : pepper_compositor_add_seat(name)\r
+pepper_seat -> compositor: add global for wl_seat\r
+compositor ->] : send  PEPPER_EVENT_COMPOSITOR_SEAT_ADD\r
+compositor ->input_device : pepper_input_device_create\r
+input_device -> input_device : initialize\r
+input_device -> compositor : add input_device\r
+compositor ->] :PEPPER_EVENT_COMPOSITOR_INPUT_DEVICE_ADD\r
+\r
+input_manager <-] :PEPPER_EVENT_COMPOSITOR_INPUT_DEVICE_ADD\r
+input_manager -> pepper_seat : pepper_seat_add_input_device\r
+pepper_seat -> pepper_seat : add input_device to list\r
+pepper_seat -> pepper_seat : seat_update_caps(seat)\r
+activate pepper_seat\r
+       alt new input caps\r
+               pepper_seat -> pepper_seat : seat_update_pointer_cap\r
+               activate pepper_seat\r
+                       alt add new pointer\r
+                               pepper_seat -> pepper_seat : init pepper_pointer\r
+                               pepper_seat ->] : emit::PEPPER_EVENT_SEAT_POINTER_ADD\r
+                       else\r
+                               pepper_seat -> pepper_seat : fini pepper_pointer\r
+                               pepper_seat ->] : emit::PEPPER_EVENT_SEAT_POINTER_REMOVE\r
+                       end\r
+\r
+                       pepper_seat -> pepper_seat : update touch\r
+                       pepper_seat -> pepper_seat : update keyboard\r
+\r
+                       loop wl_seat list\r
+                               [<-pepper_seat: send wl_seat_send_capabilities\r
+                       end\r
+               deactivate pepper_seat\r
+       end\r
+deactivate pepper_seat\r
+pepper_seat -> input_device : add Event Listener::PEPPER_EVENT_ALL\r
+note right\r
+    PEPPER_EVENT_INPUT_DEVICE_POINTER_MOTION\r
+    PEPPER_EVENT_INPUT_DEVICE_POINTER_MOTION_ABSOLUTE,\r
+    PEPPER_EVENT_INPUT_DEVICE_POINTER_BUTTON,\r
+    PEPPER_EVENT_INPUT_DEVICE_POINTER_AXIS,\r
+\r
+    PEPPER_EVENT_INPUT_DEVICE_KEYBOARD_KEY,\r
+\r
+    PEPPER_EVENT_INPUT_DEVICE_TOUCH_DOWN,\r
+    PEPPER_EVENT_INPUT_DEVICE_TOUCH_UP,\r
+    PEPPER_EVENT_INPUT_DEVICE_TOUCH_MOTION,\r
+    PEPPER_EVENT_INPUT_DEVICE_TOUCH_FRAME,\r
+    PEPPER_EVENT_INPUT_DEVICE_TOUCH_CANCEL,\r
+endnote\r
+client <- compositor : registry::wl_seat\r
+client -> pepper_seat : bind(wl_seat)\r
+pepper_seat -> pepper_seat : create wl_resource for wl_seat\r
+pepper_seat -> pepper_seat : add wl_resource to list\r
+\r
+client -> pepper_seat : wl_seat_get_pointer\r
+pepper_seat -> pepper_seat : create wl_resource for wl_pointer\r
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-output_schedule_repaint.plantuml b/doc/plantuml/sequence-output_schedule_repaint.plantuml
new file mode 100644 (file)
index 0000000..732dca2
--- /dev/null
@@ -0,0 +1,16 @@
+@startuml
+
+title pepper_output_schedule_repaint
+
+activate output
+->output : pepper_output_shedule_repaint
+alt output->frame.scheduled == 1
+       <-output
+end
+alt output->frame.pending == 1
+       <-output
+end
+output->output : wl_event_loop_add_idle(idle_repaint);
+deactivate output
+
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-shell-init.plantuml b/doc/plantuml/sequence-shell-init.plantuml
new file mode 100755 (executable)
index 0000000..a6e73cc
--- /dev/null
@@ -0,0 +1,18 @@
+@startuml\r
+\r
+actor user\r
+create desktop_shell\r
+user->desktop_shell : pepper_desktop_shell_init(compositor)\r
+desktop_shell->desktop_shell : init wl_shell\r
+desktop_shell->desktop_shell : init xdg_shell\r
+desktop_shell->desktop_shell : init_listeners\r
+activate desktop_shell\r
+       desktop_shell -> compositor: add event listener\r
+       note right\r
+               PEPPER_EVENT_COMPOSITOR_INPUT_DEVICE_ADD\r
+               PEPPER_EVENT_COMPOSITOR_SEAT_ADD\r
+               PEPPER_EVENT_COMPOSITOR_SEAT_REMOVE\r
+       endnote\r
+deactivate desktop_shell\r
+\r
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-surface-create.plantuml b/doc/plantuml/sequence-surface-create.plantuml
new file mode 100755 (executable)
index 0000000..8cc3c8e
--- /dev/null
@@ -0,0 +1,18 @@
+@startuml\r
+title Create surface\r
+actor wl_client\r
+wl_client -> compositor : wl_compositor_create_surface\r
+create surface\r
+compositor -> surface : pepper_surface_create\r
+surface -> surface : create wl_surface resource\r
+surface -> surface: initialize pepper_surface_t\r
+note right\r
+       state, regions, frame_callback_list, view_list\r
+end note\r
+surface -> compositor : return new surface\r
+\r
+note left: need change\r
+compositor -> compositor: add to surface_list\r
+compositor -->]:  emit PEPPER_EVENT_COMPOSITOR_SURFACE_ADD\r
+\r
+@enduml\r
diff --git a/doc/plantuml/sequence-surface-update.plantuml b/doc/plantuml/sequence-surface-update.plantuml
new file mode 100755 (executable)
index 0000000..3ee7fe6
--- /dev/null
@@ -0,0 +1,82 @@
+@startuml\r
+title surface update\r
+\r
+actor user\r
+user->user : update buffer\r
+user->surface: wl_surface_attach(wl_buffer)\r
+alt new buffer\r
+       create buffer\r
+       surface -> buffer: pepper_buffer_from_resoure(wl_buffer)\r
+end\r
+surface->surface : set to pending state, newly_attached:1\r
+\r
+user->surface: wl_surface_damage\r
+surface->surface : add to pending.damage_region\r
+user->surface: wl_surface_commit\r
+\r
+surface->surface: pepper_surface_commit\r
+activate surface\r
+alt newly_attached==1\r
+       alt buffer.buffer\r
+               surface->surface: buffer unreference(buffer)\r
+               surface->surface: event_listener_remove\r
+       end\r
+       alt pending.buffer\r
+               surface->buffer: refernece\r
+               surface->buffer: add destroy_listener::PEPPER_EVENT_OBJECT_DESTROY\r
+       end\r
+       surface->surface : Set buffer.buffer from pending.buffer\r
+\r
+       surface->surface : attach_surface_to_outputs\r
+       activate surface\r
+               loop compositor::output_list\r
+                       surface -> output: attach_surface(surface, &w, &h)\r
+                       surface -> surface: set buffer.buffer w,h\r
+               end\r
+       deactivate surface\r
+end\r
+\r
+surface->surface : Set buffer.transform,scale, frame_callback from pending\r
+surface->surface : update_size\r
+activate surface\r
+       note right\r
+               set w,h of surface from\r
+               buffer size, scale and transform\r
+       endnote\r
+deactivate surface\r
+\r
+surface->surface : update damage_region\r
+surface->surface : pepper_surface_flush_damage\r
+activate surface\r
+       loop surface->view_list\r
+               surface->view : pepper_view_surface_damage\r
+               loop view->planes\r
+                       view->plane: pepper_plane_add_damage_region\r
+                       plane->plane: update damage_region\r
+                       plane->output: pepper_output_schedule_repaint\r
+                       output->output: add idle_repaint\r
+                       note left\r
+                               For screen update\r
+                       endnote\r
+               end\r
+       end\r
+\r
+       loop surface->compositor->output_list\r
+               surface->output : backend->flush_surface\r
+       end\r
+deactivate surface\r
+[<-surface :  PEPPER_EVENT_SURFACE_COMMIT\r
+deactivate surface\r
+\r
+[->shell_surface : PEPPER_EVENT_SURFACE_COMMIT\r
+shell_surface -> shell_surface: Call surface_map function for type\r
+note right\r
+    SHELL_SURFACE_TYPE_NONE,\r
+    SHELL_SURFACE_TYPE_TOPLEVEL,\r
+    SHELL_SURFACE_TYPE_TRANSIENT,\r
+    SHELL_SURFACE_TYPE_FULLSCREEN,\r
+    SHELL_SURFACE_TYPE_POPUP,\r
+    SHELL_SURFACE_TYPE_MAXIMIZED,\r
+    SHELL_SURFACE_TYPE_MINIMIZED,\r
+endnote\r
+@enduml
\ No newline at end of file
diff --git a/doc/plantuml/sequence-view-create.plantuml b/doc/plantuml/sequence-view-create.plantuml
new file mode 100755 (executable)
index 0000000..392bc69
--- /dev/null
@@ -0,0 +1,35 @@
+@startuml\r
+\r
+title wl_shell_surface create\r
+\r
+actor user\r
+participant compositor<<pepper>>\r
+participant shell<<pepper>>\r
+\r
+user->compositor:bind wl_shell\r
+compositor->shell:bind_shell\r
+shell->shell:shell_client_create\r
+user->shell:wl_shell_get_shell_surface\r
+shell->surface: pepper_surface_set_role()\r
+create shell_surface\r
+shell->shell_surface: shell_surface_create(surface)\r
+\r
+create view\r
+shell_surface->view: create and add to compositor\r
+shell_surface->surface:add_event_listener:PEPPER_EVENT_OBJECT_DESTROY\r
+shell_surface->shell_surface\r
+note right\r
+       set init values\r
+       type:SHELL_SURFACE_TYPE_NONE\r
+       child, parent\r
+endnote\r
+shell_surface->surface:add_event_listener:PEPPER_EVENT_SURFACE_COMMIT\r
+shell_surface->shell_surface: Set send_configure callback by role\r
+note left\r
+role\r
+wl_shell_surface\r
+xdg_surface\r
+xdg_popup\r
+endnote\r
+\r
+@enduml\r
diff --git a/doc/plantuml/sequence-wl_surface_commit.plantuml b/doc/plantuml/sequence-wl_surface_commit.plantuml
new file mode 100644 (file)
index 0000000..add0323
--- /dev/null
@@ -0,0 +1,72 @@
+@startuml
+title wl_surface_commit
+
+actor user
+user->surface: wl_surface_commit
+
+surface->surface: surface_commit
+activate surface
+surface->surface : pepper_subsurface_commit
+
+alt surface->pending.state->newly_attached == 1
+       alt surface->buffer.buffer
+               surface->surface: unreference buffer
+               surface->surface: event_listener_remove
+       end
+       alt surface->pending.state->buffer
+               surface->buffer: reference buffer
+               surface->buffer: add destroy_listener::PEPPER_EVENT_OBJECT_DESTROY
+       end
+       surface->surface : Set buffer.buffer from pending.buffer
+
+       surface->surface : attach_surface_to_outputs
+       activate surface
+               loop surface->compositor->output_list
+                       surface -> output: attach_surface(surface, &w, &h)
+                       surface -> surface: set buffer.buffer w,h
+               end loop
+       deactivate surface
+end
+
+surface->surface : Set buffer.transform,scale, frame_callback from pending
+surface->surface : update_size
+activate surface
+       note right
+               set w,h of surface from
+               buffer size, scale and transform
+       endnote
+deactivate surface
+
+surface->surface : update damage_region
+surface->surface : pepper_surface_flush_damage
+loop surface->view_list
+       surface->view : pepper_view_resize(view, surface->w, surface->h)
+       surface->view : pepper_view_mark_dirty
+       view->compositor : pepper_compositor_schedule_repaint
+       note right
+               schedule the update of
+               the compositor's outputs at idle time
+       endnote
+end loop
+
+loop surface->compositor->output_list
+       surface->output : backend->flush_surface
+end loop
+
+[<-surface : emit PEPPER_EVENT_SURFACE_COMMIT
+deactivate surface
+
+[->shell_surface : signal PEPPER_EVENT_SURFACE_COMMIT
+activate shell_surface
+       shell_surface -> shell_surface: Call surface_map function for type
+       note right
+               SHELL_SURFACE_TYPE_NONE,
+               SHELL_SURFACE_TYPE_TOPLEVEL,
+               SHELL_SURFACE_TYPE_TRANSIENT,
+               SHELL_SURFACE_TYPE_FULLSCREEN,
+               SHELL_SURFACE_TYPE_POPUP,
+               SHELL_SURFACE_TYPE_MAXIMIZED,
+               SHELL_SURFACE_TYPE_MINIMIZED,
+       endnote
+deactivate shell_surface
+@enduml
\ No newline at end of file