/*
 * Copyright (C) 2024 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.
 */

syntax = "proto2";

import "protos/perfetto/trace/android/graphics/point.proto";
import "protos/perfetto/trace/android/view/surfacecontrol.proto";

package perfetto.protos;

// Represents a {@link android.view.InsetsSourceControl} object
message InsetsSourceControlProto {
  optional string type = 1 [deprecated = true];
  optional PointProto position = 2;
  optional SurfaceControlProto leash = 3;
  optional int32 type_number = 4;
}