blob: 26a575f8342ef1386e0830d6f6ccfea3fe843429 [file] [log] [blame]
/**
* Copyright (C) 2023 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 <binder/Parcelable.h>
#include <math.h>
struct AWorkDuration {};
namespace android::os {
/**
* C++ Parcelable version of {@link PerformanceHintManager.WorkDuration} that can be used in
* binder calls.
* This file needs to be kept in sync with the WorkDuration in
* frameworks/base/core/java/android/os/WorkDuration.java
*/
struct WorkDuration : AWorkDuration, android::Parcelable {
WorkDuration() = default;
~WorkDuration() = default;
WorkDuration(int64_t workPeriodStartTimestampNanos, int64_t actualTotalDurationNanos,
int64_t actualCpuDurationNanos, int64_t actualGpuDurationNanos);
status_t writeToParcel(Parcel* parcel) const override;
status_t readFromParcel(const Parcel* parcel) override;
inline bool equalsWithoutTimestamp(const WorkDuration& other) const {
return workPeriodStartTimestampNanos == other.workPeriodStartTimestampNanos &&
actualTotalDurationNanos == other.actualTotalDurationNanos &&
actualCpuDurationNanos == other.actualCpuDurationNanos &&
actualGpuDurationNanos == other.actualGpuDurationNanos;
}
bool operator==(const WorkDuration& other) const {
return timestampNanos == other.timestampNanos && equalsWithoutTimestamp(other);
}
bool operator!=(const WorkDuration& other) const { return !(*this == other); }
friend std::ostream& operator<<(std::ostream& os, const WorkDuration& workDuration) {
os << "{"
<< "workPeriodStartTimestampNanos: " << workDuration.workPeriodStartTimestampNanos
<< ", actualTotalDurationNanos: " << workDuration.actualTotalDurationNanos
<< ", actualCpuDurationNanos: " << workDuration.actualCpuDurationNanos
<< ", actualGpuDurationNanos: " << workDuration.actualGpuDurationNanos
<< ", timestampNanos: " << workDuration.timestampNanos << "}";
return os;
}
int64_t timestampNanos;
int64_t actualTotalDurationNanos;
int64_t workPeriodStartTimestampNanos;
int64_t actualCpuDurationNanos;
int64_t actualGpuDurationNanos;
};
} // namespace android::os