120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair/*
220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * Copyright (C) 2018 The Android Open Source Project
320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * Licensed under the Apache License, Version 2.0 (the "License");
520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * you may not use this file except in compliance with the License.
620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * You may obtain a copy of the License at
720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *      http://www.apache.org/licenses/LICENSE-2.0
920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
1020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * Unless required by applicable law or agreed to in writing, software
1120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * distributed under the License is distributed on an "AS IS" BASIS,
1220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * See the License for the specific language governing permissions and
1420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * limitations under the License.
1520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair */
1620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
1720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair#ifndef ANDROID_OS_DUMPSTATESECTIONREPORTER_H_
1820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair#define ANDROID_OS_DUMPSTATESECTIONREPORTER_H_
1920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
2020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair#include <android/os/IDumpstateListener.h>
2120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair#include <utils/StrongPointer.h>
2220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
2320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nairnamespace android {
2420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nairnamespace os {
2520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nairnamespace dumpstate {
2620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
2720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
2820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair/*
2920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * Helper class used to report per section details to a listener.
3020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
3120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair * Typical usage:
3220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
3320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *    DumpstateSectionReporter sectionReporter(title, listener, sendReport);
3420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *    sectionReporter.setSize(5000);
3520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair *
3620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair */
3720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nairclass DumpstateSectionReporter {
3820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair  public:
3920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    DumpstateSectionReporter(const std::string& title, sp<android::os::IDumpstateListener> listener,
4020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair                             bool sendReport);
4120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
4220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    ~DumpstateSectionReporter();
4320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
4420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    void setStatus(status_t status) {
4520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair        status_ = status;
4620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    }
4720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
4820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    void setSize(int size) {
4920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair        size_ = size;
5020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    }
5120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
5220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair  private:
5320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    std::string title_;
5420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    android::sp<android::os::IDumpstateListener> listener_;
5520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    bool sendReport_;
5620cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    status_t status_;
5720cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    int size_;
5820cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair    std::chrono::time_point<std::chrono::steady_clock> started_;
5920cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair};
6020cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
6120cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair}  // namespace dumpstate
6220cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair}  // namespace os
6320cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair}  // namespace android
6420cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair
6520cf5036c1f373c1acfbb95295f118b7ff6c2227Vishnu Nair#endif  // ANDROID_OS_DUMPSTATESECTIONREPORTER_H_
66