# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../../../../gn/proto_library.gni")

perfetto_proto_library("@TYPE@") {
  sources = [
    "chrome_application_state_info.proto",
    "chrome_compositor_scheduler_state.proto",
    "chrome_content_settings_event_info.proto",
    "chrome_frame_reporter.proto",
    "chrome_histogram_sample.proto",
    "chrome_keyed_service.proto",
    "chrome_latency_info.proto",
    "chrome_legacy_ipc.proto",
    "chrome_message_pump.proto",
    "chrome_mojo_event_info.proto",
    "chrome_process_descriptor.proto",
    "chrome_renderer_scheduler_state.proto",
    "chrome_thread_descriptor.proto",
    "chrome_user_event.proto",
    "chrome_window_handle_event_info.proto",
    "counter_descriptor.proto",
    "debug_annotation.proto",
    "log_message.proto",
    "process_descriptor.proto",
    "source_location.proto",
    "task_execution.proto",
    "thread_descriptor.proto",
    "track_descriptor.proto",
    "track_event.proto",
  ]
}

perfetto_proto_library("@TYPE@") {
  proto_generators = [ "descriptor" ]
  generate_descriptor = "track_event.descriptor"
  sources = [ "track_event.proto" ]
  deps = [ ":source_set" ]
}
