/* * Copyright (C) 2021 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. */ #pragma once #include #include #include #include "FrontEnd/DisplayInfo.h" #include "FrontEnd/LayerCreationArgs.h" #include "TransactionState.h" namespace android::surfaceflinger { struct TracingLayerState : ResolvedComposerState { bool hasSidebandStream; LayerCreationArgs args; }; class TransactionProtoParser { public: // Utility class to map handles to ids and buffers to buffer properties without pulling // in SurfaceFlinger dependencies. class FlingerDataMapper { public: virtual ~FlingerDataMapper() = default; virtual sp getDisplayHandle(int32_t /* displayId */) const { return nullptr; } virtual int32_t getDisplayId(const sp& /* displayHandle */) const { return -1; } }; TransactionProtoParser(std::unique_ptr provider) : mMapper(std::move(provider)) {} perfetto::protos::TransactionState toProto(const TransactionState&); perfetto::protos::TransactionState toProto( const std::map&); perfetto::protos::LayerCreationArgs toProto(const LayerCreationArgs& args); perfetto::protos::LayerState toProto(const ResolvedComposerState&); static perfetto::protos::DisplayInfo toProto(const frontend::DisplayInfo&, uint32_t layerStack); TransactionState fromProto(const perfetto::protos::TransactionState&); void mergeFromProto(const perfetto::protos::LayerState&, TracingLayerState& outState); void fromProto(const perfetto::protos::LayerCreationArgs&, LayerCreationArgs& outArgs); std::unique_ptr mMapper; static frontend::DisplayInfo fromProto(const perfetto::protos::DisplayInfo&); static void fromProto(const google::protobuf::RepeatedPtrField&, frontend::DisplayInfos& outDisplayInfos); private: perfetto::protos::DisplayState toProto(const DisplayState&); void fromProto(const perfetto::protos::LayerState&, ResolvedComposerState& out); DisplayState fromProto(const perfetto::protos::DisplayState&); }; } // namespace android::surfaceflinger