Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/exo/wayland/server.h" | 5 #include "components/exo/wayland/server.h" |
| 6 | 6 |
| 7 #include <alpha-compositing-unstable-v1-server-protocol.h> | 7 #include <alpha-compositing-unstable-v1-server-protocol.h> |
| 8 #include <gaming-input-unstable-v1-server-protocol.h> | 8 #include <gaming-input-unstable-v1-server-protocol.h> |
| 9 #include <gaming-input-unstable-v2-server-protocol.h> | 9 #include <gaming-input-unstable-v2-server-protocol.h> |
| 10 #include <grp.h> | 10 #include <grp.h> |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 639 const auto& inserted = linux_buffer_params->planes.insert( | 639 const auto& inserted = linux_buffer_params->planes.insert( |
| 640 std::pair<uint32_t, LinuxBufferParams::Plane>(plane_idx, | 640 std::pair<uint32_t, LinuxBufferParams::Plane>(plane_idx, |
| 641 std::move(plane))); | 641 std::move(plane))); |
| 642 if (!inserted.second) { // The plane was already there. | 642 if (!inserted.second) { // The plane was already there. |
| 643 wl_resource_post_error(resource, ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_SET, | 643 wl_resource_post_error(resource, ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_SET, |
| 644 "plane already set"); | 644 "plane already set"); |
| 645 return; | 645 return; |
| 646 } | 646 } |
| 647 } | 647 } |
| 648 | 648 |
| 649 void linux_buffer_params_create(wl_client* client, | 649 void linux_buffer_params_create_impl(wl_client* client, |
|
reveman
2017/04/28 17:21:24
I think the code will be easier to read if you did
| |
| 650 wl_resource* resource, | 650 wl_resource* resource, |
| 651 int32_t width, | 651 uint32_t buffer_id, |
| 652 int32_t height, | 652 int32_t width, |
| 653 uint32_t format, | 653 int32_t height, |
| 654 uint32_t flags) { | 654 uint32_t format, |
| 655 uint32_t flags) { | |
| 655 if (width <= 0 || height <= 0) { | 656 if (width <= 0 || height <= 0) { |
| 656 wl_resource_post_error(resource, | 657 wl_resource_post_error(resource, |
| 657 ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS, | 658 ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_DIMENSIONS, |
| 658 "invalid width or height"); | 659 "invalid width or height"); |
| 659 return; | 660 return; |
| 660 } | 661 } |
| 661 | 662 |
| 662 const auto* supported_format = std::find_if( | 663 const auto* supported_format = std::find_if( |
| 663 std::begin(dmabuf_supported_formats), std::end(dmabuf_supported_formats), | 664 std::begin(dmabuf_supported_formats), std::end(dmabuf_supported_formats), |
| 664 [format](const dmabuf_supported_format& supported_format) { | 665 [format](const dmabuf_supported_format& supported_format) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 705 LinuxBufferParams::Plane& plane = plane_it->second; | 706 LinuxBufferParams::Plane& plane = plane_it->second; |
| 706 planes.emplace_back(plane.stride, plane.offset, 0, 0); | 707 planes.emplace_back(plane.stride, plane.offset, 0, 0); |
| 707 fds.push_back(std::move(plane.fd)); | 708 fds.push_back(std::move(plane.fd)); |
| 708 } | 709 } |
| 709 | 710 |
| 710 std::unique_ptr<Buffer> buffer = | 711 std::unique_ptr<Buffer> buffer = |
| 711 linux_buffer_params->display->CreateLinuxDMABufBuffer( | 712 linux_buffer_params->display->CreateLinuxDMABufBuffer( |
| 712 gfx::Size(width, height), supported_format->buffer_format, planes, | 713 gfx::Size(width, height), supported_format->buffer_format, planes, |
| 713 std::move(fds)); | 714 std::move(fds)); |
| 714 if (!buffer) { | 715 if (!buffer) { |
| 715 zwp_linux_buffer_params_v1_send_failed(resource); | 716 // buffer_id != 0 indicates a create_immed request. on import failure |
| 716 return; | 717 // in that case, the protocol allows us to raise a fatal error from |
| 718 // zwp_linux_dmabuf_v1 version 2+. | |
| 719 if (buffer_id == 0) | |
| 720 zwp_linux_buffer_params_v1_send_failed(resource); | |
| 721 else { | |
| 722 wl_resource_post_error(resource, | |
| 723 ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_WL_BUFFER, | |
| 724 "dmabuf import failed"); | |
| 725 return; | |
| 726 } | |
| 717 } | 727 } |
| 718 | 728 |
| 719 wl_resource* buffer_resource = | 729 wl_resource* buffer_resource = |
| 720 wl_resource_create(client, &wl_buffer_interface, 1, 0); | 730 wl_resource_create(client, &wl_buffer_interface, 1, buffer_id); |
| 721 | 731 |
| 722 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, | 732 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, |
| 723 base::Unretained(buffer_resource))); | 733 base::Unretained(buffer_resource))); |
| 724 | 734 |
| 725 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer)); | 735 SetImplementation(buffer_resource, &buffer_implementation, std::move(buffer)); |
| 726 | 736 |
| 727 zwp_linux_buffer_params_v1_send_created(resource, buffer_resource); | 737 // for a create_immed request, no event is triggered. |
| 738 if (buffer_id == 0) | |
| 739 zwp_linux_buffer_params_v1_send_created(resource, buffer_resource); | |
| 740 } | |
| 741 | |
| 742 void linux_buffer_params_create(wl_client* client, | |
| 743 wl_resource* resource, | |
| 744 int32_t width, | |
| 745 int32_t height, | |
| 746 uint32_t format, | |
| 747 uint32_t flags) { | |
| 748 linux_buffer_params_create_impl(client, resource, 0, width, height, format, | |
| 749 flags); | |
| 750 } | |
| 751 | |
| 752 void linux_buffer_params_create_immed(wl_client* client, | |
| 753 wl_resource* resource, | |
| 754 uint32_t buffer_id, | |
| 755 int32_t width, | |
| 756 int32_t height, | |
| 757 uint32_t format, | |
| 758 uint32_t flags) { | |
| 759 linux_buffer_params_create_impl(client, resource, buffer_id, width, height, | |
| 760 format, flags); | |
| 728 } | 761 } |
| 729 | 762 |
| 730 const struct zwp_linux_buffer_params_v1_interface | 763 const struct zwp_linux_buffer_params_v1_interface |
| 731 linux_buffer_params_implementation = {linux_buffer_params_destroy, | 764 linux_buffer_params_implementation = { |
| 732 linux_buffer_params_add, | 765 linux_buffer_params_destroy, linux_buffer_params_add, |
| 733 linux_buffer_params_create}; | 766 linux_buffer_params_create, linux_buffer_params_create_immed}; |
| 734 | 767 |
| 735 //////////////////////////////////////////////////////////////////////////////// | 768 //////////////////////////////////////////////////////////////////////////////// |
| 736 // linux_dmabuf_interface: | 769 // linux_dmabuf_interface: |
| 737 | 770 |
| 738 void linux_dmabuf_destroy(wl_client* client, wl_resource* resource) { | 771 void linux_dmabuf_destroy(wl_client* client, wl_resource* resource) { |
| 739 wl_resource_destroy(resource); | 772 wl_resource_destroy(resource); |
| 740 } | 773 } |
| 741 | 774 |
| 742 void linux_dmabuf_create_params(wl_client* client, | 775 void linux_dmabuf_create_params(wl_client* client, |
| 743 wl_resource* resource, | 776 wl_resource* resource, |
| 744 uint32_t id) { | 777 uint32_t id) { |
| 745 std::unique_ptr<LinuxBufferParams> linux_buffer_params = | 778 std::unique_ptr<LinuxBufferParams> linux_buffer_params = |
| 746 base::MakeUnique<LinuxBufferParams>(GetUserDataAs<Display>(resource)); | 779 base::MakeUnique<LinuxBufferParams>(GetUserDataAs<Display>(resource)); |
| 747 | 780 |
| 748 wl_resource* linux_buffer_params_resource = | 781 wl_resource* linux_buffer_params_resource = |
| 749 wl_resource_create(client, &zwp_linux_buffer_params_v1_interface, 1, id); | 782 wl_resource_create(client, &zwp_linux_buffer_params_v1_interface, 2, id); |
| 750 | 783 |
| 751 SetImplementation(linux_buffer_params_resource, | 784 SetImplementation(linux_buffer_params_resource, |
| 752 &linux_buffer_params_implementation, | 785 &linux_buffer_params_implementation, |
| 753 std::move(linux_buffer_params)); | 786 std::move(linux_buffer_params)); |
| 754 } | 787 } |
| 755 | 788 |
| 756 const struct zwp_linux_dmabuf_v1_interface linux_dmabuf_implementation = { | 789 const struct zwp_linux_dmabuf_v1_interface linux_dmabuf_implementation = { |
| 757 linux_dmabuf_destroy, linux_dmabuf_create_params}; | 790 linux_dmabuf_destroy, linux_dmabuf_create_params}; |
| 758 | 791 |
| 759 void bind_linux_dmabuf(wl_client* client, | 792 void bind_linux_dmabuf(wl_client* client, |
| 760 void* data, | 793 void* data, |
| 761 uint32_t version, | 794 uint32_t version, |
| 762 uint32_t id) { | 795 uint32_t id) { |
| 763 wl_resource* resource = | 796 wl_resource* resource = |
| 764 wl_resource_create(client, &zwp_linux_dmabuf_v1_interface, 1, id); | 797 wl_resource_create(client, &zwp_linux_dmabuf_v1_interface, version, id); |
| 765 | 798 |
| 766 wl_resource_set_implementation(resource, &linux_dmabuf_implementation, data, | 799 wl_resource_set_implementation(resource, &linux_dmabuf_implementation, data, |
| 767 nullptr); | 800 nullptr); |
| 768 | 801 |
| 769 for (const auto& supported_format : dmabuf_supported_formats) | 802 for (const auto& supported_format : dmabuf_supported_formats) |
| 770 zwp_linux_dmabuf_v1_send_format(resource, supported_format.dmabuf_format); | 803 zwp_linux_dmabuf_v1_send_format(resource, supported_format.dmabuf_format); |
| 771 } | 804 } |
| 772 | 805 |
| 773 #endif | 806 #endif |
| 774 | 807 |
| (...skipping 3071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3846 // Server, public: | 3879 // Server, public: |
| 3847 | 3880 |
| 3848 Server::Server(Display* display) | 3881 Server::Server(Display* display) |
| 3849 : display_(display), wl_display_(wl_display_create()) { | 3882 : display_(display), wl_display_(wl_display_create()) { |
| 3850 wl_global_create(wl_display_.get(), &wl_compositor_interface, | 3883 wl_global_create(wl_display_.get(), &wl_compositor_interface, |
| 3851 compositor_version, display_, bind_compositor); | 3884 compositor_version, display_, bind_compositor); |
| 3852 wl_global_create(wl_display_.get(), &wl_shm_interface, 1, display_, bind_shm); | 3885 wl_global_create(wl_display_.get(), &wl_shm_interface, 1, display_, bind_shm); |
| 3853 #if defined(USE_OZONE) | 3886 #if defined(USE_OZONE) |
| 3854 wl_global_create(wl_display_.get(), &wl_drm_interface, drm_version, display_, | 3887 wl_global_create(wl_display_.get(), &wl_drm_interface, drm_version, display_, |
| 3855 bind_drm); | 3888 bind_drm); |
| 3856 wl_global_create(wl_display_.get(), &zwp_linux_dmabuf_v1_interface, 1, | 3889 wl_global_create(wl_display_.get(), &zwp_linux_dmabuf_v1_interface, 2, |
| 3857 display_, bind_linux_dmabuf); | 3890 display_, bind_linux_dmabuf); |
| 3858 #endif | 3891 #endif |
| 3859 wl_global_create(wl_display_.get(), &wl_subcompositor_interface, 1, display_, | 3892 wl_global_create(wl_display_.get(), &wl_subcompositor_interface, 1, display_, |
| 3860 bind_subcompositor); | 3893 bind_subcompositor); |
| 3861 wl_global_create(wl_display_.get(), &wl_shell_interface, 1, display_, | 3894 wl_global_create(wl_display_.get(), &wl_shell_interface, 1, display_, |
| 3862 bind_shell); | 3895 bind_shell); |
| 3863 wl_global_create(wl_display_.get(), &wl_output_interface, output_version, | 3896 wl_global_create(wl_display_.get(), &wl_output_interface, output_version, |
| 3864 display_, bind_output); | 3897 display_, bind_output); |
| 3865 wl_global_create(wl_display_.get(), &xdg_shell_interface, 1, display_, | 3898 wl_global_create(wl_display_.get(), &xdg_shell_interface, 1, display_, |
| 3866 bind_xdg_shell_v5); | 3899 bind_xdg_shell_v5); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3956 DCHECK(event_loop); | 3989 DCHECK(event_loop); |
| 3957 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); | 3990 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); |
| 3958 } | 3991 } |
| 3959 | 3992 |
| 3960 void Server::Flush() { | 3993 void Server::Flush() { |
| 3961 wl_display_flush_clients(wl_display_.get()); | 3994 wl_display_flush_clients(wl_display_.get()); |
| 3962 } | 3995 } |
| 3963 | 3996 |
| 3964 } // namespace wayland | 3997 } // namespace wayland |
| 3965 } // namespace exo | 3998 } // namespace exo |
| OLD | NEW |