18d05d8e7Sopenharmony_ci/*
28d05d8e7Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
38d05d8e7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48d05d8e7Sopenharmony_ci * you may not use this file except in compliance with the License.
58d05d8e7Sopenharmony_ci * You may obtain a copy of the License at
68d05d8e7Sopenharmony_ci *
78d05d8e7Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88d05d8e7Sopenharmony_ci *
98d05d8e7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108d05d8e7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118d05d8e7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128d05d8e7Sopenharmony_ci * See the License for the specific language governing permissions and
138d05d8e7Sopenharmony_ci * limitations under the License.
148d05d8e7Sopenharmony_ci */
158d05d8e7Sopenharmony_ci
168d05d8e7Sopenharmony_ci#ifndef OHOS_USER_ACCESS_TRACER
178d05d8e7Sopenharmony_ci#define OHOS_USER_ACCESS_TRACER
188d05d8e7Sopenharmony_ci
198d05d8e7Sopenharmony_ci#include <string.h>
208d05d8e7Sopenharmony_ci#include "hitrace_meter.h"
218d05d8e7Sopenharmony_ci
228d05d8e7Sopenharmony_ciclass UserAccessTracer final {
238d05d8e7Sopenharmony_cipublic:
248d05d8e7Sopenharmony_ci    UserAccessTracer() = default;
258d05d8e7Sopenharmony_ci
268d05d8e7Sopenharmony_ci    virtual ~UserAccessTracer()
278d05d8e7Sopenharmony_ci    {
288d05d8e7Sopenharmony_ci        for (int32_t i = 0; i < count_; i++) {
298d05d8e7Sopenharmony_ci            FinishTrace(HITRACE_TAG_FILEMANAGEMENT);
308d05d8e7Sopenharmony_ci        }
318d05d8e7Sopenharmony_ci        count_ = 0;
328d05d8e7Sopenharmony_ci    }
338d05d8e7Sopenharmony_ci
348d05d8e7Sopenharmony_ci    void Start(const std::string &label)
358d05d8e7Sopenharmony_ci    {
368d05d8e7Sopenharmony_ci        StartTrace(HITRACE_TAG_FILEMANAGEMENT, label);
378d05d8e7Sopenharmony_ci        count_++;
388d05d8e7Sopenharmony_ci    }
398d05d8e7Sopenharmony_ci
408d05d8e7Sopenharmony_ci    void Finish()
418d05d8e7Sopenharmony_ci    {
428d05d8e7Sopenharmony_ci        FinishTrace(HITRACE_TAG_FILEMANAGEMENT);
438d05d8e7Sopenharmony_ci        count_--;
448d05d8e7Sopenharmony_ci    }
458d05d8e7Sopenharmony_ciprivate:
468d05d8e7Sopenharmony_ci    int32_t count_ = 0;
478d05d8e7Sopenharmony_ci};
488d05d8e7Sopenharmony_ci
498d05d8e7Sopenharmony_ci#endif // OHOS_USER_ACCESS_TRACER
50