blob: e078dab55f3758fe8da526c8cc212094a1b045a3 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/ui.gni")
import("//components/viz/viz.gni")
import("//gpu/vulkan/features.gni")
import("//media/gpu/args.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
config("viz_service_implementation") {
}
viz_component("service") {
sources = [
"display/bsp_tree.cc",
"display/bsp_tree.h",
"display/bsp_walk_action.cc",
"display/bsp_walk_action.h",
"display/ca_layer_overlay.cc",
"display/ca_layer_overlay.h",
"display/color_lut_cache.cc",
"display/color_lut_cache.h",
"display/dc_layer_overlay.cc",
"display/dc_layer_overlay.h",
"display/direct_renderer.cc",
"display/direct_renderer.h",
"display/display.cc",
"display/display.h",
"display/display_client.h",
"display/display_resource_provider.cc",
"display/display_resource_provider.h",
"display/display_scheduler.cc",
"display/display_scheduler.h",
"display/draw_polygon.cc",
"display/draw_polygon.h",
"display/dynamic_geometry_binding.cc",
"display/dynamic_geometry_binding.h",
"display/external_use_client.h",
"display/frame_rate_decider.cc",
"display/frame_rate_decider.h",
"display/geometry_binding.cc",
"display/geometry_binding.h",
"display/gl_renderer.cc",
"display/gl_renderer.h",
"display/gl_renderer_copier.cc",
"display/gl_renderer_copier.h",
"display/gl_renderer_draw_cache.cc",
"display/gl_renderer_draw_cache.h",
"display/layer_quad.cc",
"display/layer_quad.h",
"display/output_surface.cc",
"display/output_surface.h",
"display/output_surface_client.h",
"display/output_surface_frame.cc",
"display/output_surface_frame.h",
"display/overlay_candidate.cc",
"display/overlay_candidate.h",
"display/overlay_candidate_validator.cc",
"display/overlay_candidate_validator.h",
"display/overlay_processor.cc",
"display/overlay_processor.h",
"display/overlay_strategy_fullscreen.cc",
"display/overlay_strategy_fullscreen.h",
"display/overlay_strategy_single_on_top.cc",
"display/overlay_strategy_single_on_top.h",
"display/overlay_strategy_underlay.cc",
"display/overlay_strategy_underlay.h",
"display/overlay_strategy_underlay_cast.cc",
"display/overlay_strategy_underlay_cast.h",
"display/program_binding.cc",
"display/program_binding.h",
"display/renderer_utils.cc",
"display/renderer_utils.h",
"display/resource_fence.h",
"display/resource_metadata.cc",
"display/resource_metadata.h",
"display/scoped_gpu_memory_buffer_texture.cc",
"display/scoped_gpu_memory_buffer_texture.h",
"display/scoped_render_pass_texture.cc",
"display/scoped_render_pass_texture.h",
"display/shader.cc",
"display/shader.h",
"display/shared_bitmap_manager.h",
"display/skia_output_surface.cc",
"display/skia_output_surface.h",
"display/skia_renderer.cc",
"display/skia_renderer.h",
"display/software_output_device.cc",
"display/software_output_device.h",
"display/software_renderer.cc",
"display/software_renderer.h",
"display/static_geometry_binding.cc",
"display/static_geometry_binding.h",
"display/surface_aggregator.cc",
"display/surface_aggregator.h",
"display/sync_query_collection.cc",
"display/sync_query_collection.h",
"display/texture_deleter.cc",
"display/texture_deleter.h",
"display_embedder/buffer_queue.cc",
"display_embedder/buffer_queue.h",
"display_embedder/compositing_mode_reporter_impl.cc",
"display_embedder/compositing_mode_reporter_impl.h",
"display_embedder/direct_context_provider.cc",
"display_embedder/direct_context_provider.h",
"display_embedder/gl_output_surface.cc",
"display_embedder/gl_output_surface.h",
"display_embedder/gl_output_surface_buffer_queue.cc",
"display_embedder/gl_output_surface_buffer_queue.h",
"display_embedder/gl_output_surface_offscreen.cc",
"display_embedder/gl_output_surface_offscreen.h",
"display_embedder/in_process_gpu_memory_buffer_manager.cc",
"display_embedder/in_process_gpu_memory_buffer_manager.h",
"display_embedder/output_surface_provider.h",
"display_embedder/output_surface_provider_impl.cc",
"display_embedder/output_surface_provider_impl.h",
"display_embedder/server_shared_bitmap_manager.cc",
"display_embedder/server_shared_bitmap_manager.h",
"display_embedder/software_output_surface.cc",
"display_embedder/software_output_surface.h",
"display_embedder/viz_process_context_provider.cc",
"display_embedder/viz_process_context_provider.h",
"display_embedder/vsync_parameter_listener.cc",
"display_embedder/vsync_parameter_listener.h",
"frame_sinks/compositor_frame_sink_impl.cc",
"frame_sinks/compositor_frame_sink_impl.h",
"frame_sinks/compositor_frame_sink_support.cc",
"frame_sinks/compositor_frame_sink_support.h",
"frame_sinks/compositor_frame_sink_support_manager.h",
"frame_sinks/direct_layer_tree_frame_sink.cc",
"frame_sinks/direct_layer_tree_frame_sink.h",
"frame_sinks/external_begin_frame_source_mojo.cc",
"frame_sinks/external_begin_frame_source_mojo.h",
"frame_sinks/frame_sink_manager_impl.cc",
"frame_sinks/frame_sink_manager_impl.h",
"frame_sinks/frame_sink_observer.h",
"frame_sinks/gpu_vsync_begin_frame_source.cc",
"frame_sinks/gpu_vsync_begin_frame_source.h",
"frame_sinks/root_compositor_frame_sink_impl.cc",
"frame_sinks/root_compositor_frame_sink_impl.h",
"frame_sinks/surface_resource_holder.cc",
"frame_sinks/surface_resource_holder.h",
"frame_sinks/surface_resource_holder_client.h",
"frame_sinks/video_capture/capturable_frame_sink.h",
"frame_sinks/video_capture/frame_sink_video_capturer_impl.cc",
"frame_sinks/video_capture/frame_sink_video_capturer_impl.h",
"frame_sinks/video_capture/frame_sink_video_capturer_manager.h",
"frame_sinks/video_capture/in_flight_frame_delivery.cc",
"frame_sinks/video_capture/in_flight_frame_delivery.h",
"frame_sinks/video_capture/interprocess_frame_pool.cc",
"frame_sinks/video_capture/interprocess_frame_pool.h",
"frame_sinks/video_capture/video_capture_overlay.cc",
"frame_sinks/video_capture/video_capture_overlay.h",
"frame_sinks/video_detector.cc",
"frame_sinks/video_detector.h",
"hit_test/hit_test_aggregator.cc",
"hit_test/hit_test_aggregator.h",
"hit_test/hit_test_aggregator_delegate.h",
"hit_test/hit_test_manager.cc",
"hit_test/hit_test_manager.h",
"surfaces/latest_local_surface_id_lookup_delegate.h",
"surfaces/referenced_surface_tracker.cc",
"surfaces/referenced_surface_tracker.h",
"surfaces/surface.cc",
"surfaces/surface.h",
"surfaces/surface_allocation_group.cc",
"surfaces/surface_allocation_group.h",
"surfaces/surface_client.h",
"surfaces/surface_dependency_deadline.cc",
"surfaces/surface_dependency_deadline.h",
"surfaces/surface_hittest.cc",
"surfaces/surface_hittest.h",
"surfaces/surface_hittest_delegate.h",
"surfaces/surface_manager.cc",
"surfaces/surface_manager.h",
"surfaces/surface_manager_delegate.h",
"surfaces/surface_observer.cc",
"surfaces/surface_observer.h",
"surfaces/surface_reference.cc",
"surfaces/surface_reference.h",
"viz_service_export.h",
]
defines = [ "VIZ_SERVICE_IMPLEMENTATION" ]
allow_circular_includes_from = [ ":gpu_service_dependencies" ]
deps = [
"//cc/base",
"//cc/paint",
"//components/crash/core/common:crash_key",
"//components/viz/common",
"//gpu/command_buffer/client:gles2_cmd_helper",
"//gpu/command_buffer/client:gles2_implementation",
"//gpu/command_buffer/client:raster",
# Note that dependency on //gpu/ipc/client is for GpuMemoryBufferImpl. This
# dependency should not be in public_deps.
"//gpu/ipc/client",
"//gpu/ipc/common:common",
"//gpu/ipc/common:surface_handle_type",
"//gpu/ipc/service",
"//gpu/skia_bindings:skia_bindings",
"//gpu/vulkan:buildflags",
"//media",
"//media/capture:capture_lib",
"//media/mojo/services",
"//services/viz/privileged/interfaces",
"//ui/display/types",
]
public_deps = [
":gpu_service_dependencies",
"//base",
"//cc",
"//cc/debug",
"//gpu/command_buffer/client:gles2_interface",
"//services/viz/privileged/interfaces/compositing",
"//services/viz/public/interfaces",
"//ui/gfx",
"//ui/gfx/geometry",
"//ui/latency",
]
if (use_x11) {
sources += [
"display_embedder/software_output_device_x11.cc",
"display_embedder/software_output_device_x11.h",
]
configs = [ "//build/config/linux:x11" ]
deps += [ "//ui/gfx/x" ]
}
if (is_chromeos) {
deps += [ "//components/arc/video_accelerator" ]
}
if (is_mac) {
sources += [
"display_embedder/overlay_candidate_validator_mac.cc",
"display_embedder/overlay_candidate_validator_mac.h",
"display_embedder/software_output_device_mac.cc",
"display_embedder/software_output_device_mac.h",
]
deps += [ "//ui/accelerated_widget_mac" ]
libs = [ "IOSurface.framework" ]
}
if (is_android) {
sources += [
"display_embedder/gl_output_surface_android.cc",
"display_embedder/gl_output_surface_android.h",
"display_embedder/overlay_candidate_validator_android.cc",
"display_embedder/overlay_candidate_validator_android.h",
"display_embedder/overlay_candidate_validator_surface_control.cc",
"display_embedder/overlay_candidate_validator_surface_control.h",
"frame_sinks/external_begin_frame_source_android.cc",
"frame_sinks/external_begin_frame_source_android.h",
"gl/throw_uncaught_exception.cc",
"gl/throw_uncaught_exception.h",
]
deps += [ ":service_jni_headers" ]
}
if (use_ozone) {
sources += [
"display_embedder/overlay_candidate_validator_ozone.cc",
"display_embedder/overlay_candidate_validator_ozone.h",
"display_embedder/software_output_device_ozone.cc",
"display_embedder/software_output_device_ozone.h",
]
public_deps += [ "//ui/ozone" ]
}
if (is_win) {
sources += [
"display_embedder/output_device_backing.cc",
"display_embedder/output_device_backing.h",
"display_embedder/overlay_candidate_validator_win.cc",
"display_embedder/overlay_candidate_validator_win.h",
"display_embedder/software_output_device_win.cc",
"display_embedder/software_output_device_win.h",
]
}
if (enable_vulkan) {
deps += [ "//gpu/vulkan" ]
}
}
# The gpu_service_dependencies source set contains source files that
# use the service side GL library (ui/gl), while the rest of
# viz/service use the client side GL library. This split is needed
# because the two GL libraries are incompatible and can't compile
# together in jumbo builds.
#
# Long term all service code is moving to be in the gpu process and
# then this build target will no longer be needed.
viz_source_set("gpu_service_dependencies") {
sources = [
"display_embedder/image_context.cc",
"display_embedder/image_context.h",
"display_embedder/skia_output_device.cc",
"display_embedder/skia_output_device.h",
"display_embedder/skia_output_device_gl.cc",
"display_embedder/skia_output_device_gl.h",
"display_embedder/skia_output_device_offscreen.cc",
"display_embedder/skia_output_device_offscreen.h",
"display_embedder/skia_output_surface_base.cc",
"display_embedder/skia_output_surface_base.h",
"display_embedder/skia_output_surface_dependency.h",
"display_embedder/skia_output_surface_dependency_impl.cc",
"display_embedder/skia_output_surface_dependency_impl.h",
"display_embedder/skia_output_surface_impl.cc",
"display_embedder/skia_output_surface_impl.h",
"display_embedder/skia_output_surface_impl_non_ddl.cc",
"display_embedder/skia_output_surface_impl_non_ddl.h",
"display_embedder/skia_output_surface_impl_on_gpu.cc",
"display_embedder/skia_output_surface_impl_on_gpu.h",
"gl/gpu_service_impl.cc",
"gl/gpu_service_impl.h",
]
public_deps = [
"//gpu/command_buffer/service:gles2",
"//gpu/ipc:gl_in_process_context",
"//gpu/ipc/service",
"//gpu/vulkan:buildflags",
"//media/gpu/ipc/service",
"//media/mojo/services",
"//services/viz/privileged/interfaces/gl",
"//skia",
"//ui/latency:latency",
]
defines = [ "VIZ_SERVICE_IMPLEMENTATION" ]
deps = []
if (is_chromeos) {
deps += [
"//components/arc/video_accelerator",
"//components/chromeos_camera:jpeg_encode_accelerator_service",
"//components/chromeos_camera:mjpeg_decode_accelerator_service",
"//gpu/command_buffer/service:gles2",
"//media/mojo/services",
]
}
if (use_ozone) {
deps += [ "//ui/ozone" ]
}
if (enable_vulkan) {
sources += [
"display_embedder/skia_output_device_vulkan.cc",
"display_embedder/skia_output_device_vulkan.h",
]
public_deps += [ "//gpu/vulkan" ]
}
if (use_x11 && enable_vulkan) {
sources += [
"display_embedder/skia_output_device_x11.cc",
"display_embedder/skia_output_device_x11.h",
]
configs = [ "//build/config/linux:x11" ]
deps += [ "//ui/gfx/x" ]
}
}
viz_source_set("unit_tests") {
# Not ready for jumbo compilation. Too much repeated test code.
never_build_jumbo = true
testonly = true
sources = [
"display/bsp_tree_unittest.cc",
"display/copy_output_scaling_pixeltest.cc",
"display/display_resource_provider_unittest.cc",
"display/display_scheduler_unittest.cc",
"display/display_unittest.cc",
"display/draw_polygon_unittest.cc",
"display/frame_rate_decider_unittest.cc",
"display/gl_renderer_copier_pixeltest.cc",
"display/gl_renderer_copier_unittest.cc",
"display/gl_renderer_unittest.cc",
"display/layer_quad_unittest.cc",
"display/overlay_unittest.cc",
"display/renderer_pixeltest.cc",
"display/shader_unittest.cc",
"display/software_renderer_unittest.cc",
"display/surface_aggregator_pixeltest.cc",
"display/surface_aggregator_unittest.cc",
"display/texture_deleter_unittest.cc",
"display_embedder/buffer_queue_unittest.cc",
"display_embedder/server_shared_bitmap_manager_unittest.cc",
"display_embedder/skia_output_surface_impl_unittest.cc",
"display_embedder/software_output_surface_unittest.cc",
"display_embedder/vsync_parameter_listener_unittest.cc",
"frame_sinks/compositor_frame_sink_support_unittest.cc",
"frame_sinks/direct_layer_tree_frame_sink_unittest.cc",
"frame_sinks/frame_sink_manager_unittest.cc",
"frame_sinks/surface_references_unittest.cc",
"frame_sinks/surface_synchronization_unittest.cc",
"frame_sinks/video_capture/frame_sink_video_capturer_impl_unittest.cc",
"frame_sinks/video_capture/interprocess_frame_pool_unittest.cc",
"frame_sinks/video_capture/video_capture_overlay_unittest.cc",
"frame_sinks/video_detector_unittest.cc",
"gl/gpu_service_impl_unittest.cc",
"hit_test/hit_test_aggregator_unittest.cc",
"surfaces/referenced_surface_tracker_unittest.cc",
"surfaces/surface_hittest_unittest.cc",
"surfaces/surface_unittest.cc",
]
if (!use_aura && !is_mac) {
sources -= [ "display_embedder/buffer_queue_unittest.cc" ]
}
configs = [
"//build/config/compiler:no_size_t_to_int_warning",
"//third_party/khronos:khronos_headers",
]
deps = [
":service",
"//base",
"//base/test:test_support",
"//cc:test_support",
"//cc/paint",
"//components/viz/client",
"//components/viz/common",
"//components/viz/host",
"//components/viz/test:test_support",
"//gpu/command_buffer/client",
"//gpu/command_buffer/client:gles2_implementation",
"//gpu/ipc:gl_in_process_context",
"//gpu/ipc/service",
"//media",
"//media/capture:capture_lib",
"//services/viz/public/interfaces",
"//skia",
"//testing/gmock",
"//testing/gtest",
"//third_party/libyuv",
"//ui/display/types",
"//ui/gfx:test_support",
"//ui/gl",
]
if (use_ozone) {
sources += [ "display_embedder/software_output_device_ozone_unittest.cc" ]
deps += [
"//ui/compositor:test_support",
"//ui/ozone",
]
}
if (is_mac) {
sources += [ "display_embedder/software_output_device_mac_unittest.mm" ]
libs = [ "IOSurface.framework" ]
}
if (is_win) {
sources += [ "display_embedder/output_device_backing_unittest.cc" ]
}
if (is_android) {
sources += [
"display_embedder/overlay_candidate_validator_surface_control_unittest.cc",
"frame_sinks/external_begin_frame_source_android_unittest.cc",
]
}
if (enable_vulkan) {
deps += [
"//gpu/vulkan:test_support",
"//gpu/vulkan/init",
]
# TODO(samans): Support more configurations.
# CFI issue: https://crbug.com/967819
# x86 issue: https://crbug.com/967831
# LSAN issue: https://crbug.com/971357
if (use_x11 && target_cpu != "x86" && !is_cfi && !is_lsan) {
defines = [ "ENABLE_VIZ_VULKAN_TESTS" ]
}
}
}
viz_source_set("perf_tests") {
# Not ready for jumbo compilation. Too much repeated test code.
never_build_jumbo = true
testonly = true
sources = [
"display/bsp_tree_perftest.cc",
"display/display_perftest.cc",
"display/gl_renderer_copier_perftest.cc",
"display/surface_aggregator_perftest.cc",
]
deps = [
":service",
"//base",
"//base/test:test_support",
"//cc",
"//cc:test_support",
"//cc/base",
"//components/viz/test:test_support",
"//testing/gtest",
"//testing/perf",
]
}
fuzzer_test("hit_test_manager_fuzzer") {
sources = [
"hit_test/hit_test_manager_fuzzer.cc",
]
libfuzzer_options = [ "max_len=81920" ]
deps = [
":service",
"//base/test:test_support",
"//components/viz/test:test_support",
]
}
if (is_android) {
android_library("service_java") {
deps = [
"//base:base_java",
"//ui/android:ui_full_java",
]
java_files = [
"java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java",
"java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java",
]
}
generate_jni("service_jni_headers") {
sources = [
"java/src/org/chromium/components/viz/service/frame_sinks/ExternalBeginFrameSourceAndroid.java",
"java/src/org/chromium/components/viz/service/gl/ThrowUncaughtException.java",
]
}
}
group("viz_service_fuzzers") {
testonly = true
deps = [
":hit_test_manager_fuzzer",
"compositor_frame_fuzzer:compositor_frame_fuzzer",
]
}