/* * Copyright (C) 2017 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. */ #include "chre/apps/wifi_offload/scan_stats.h" #include "chre/apps/wifi_offload/vector_serialization.h" namespace wifi_offload { ScanStats::ScanStats() : num_scans_requested_by_nanoapp_(0), num_scans_serviced_by_hardware_(0), num_scans_serviced_by_cache_(0), updated_at_chre_ms_(0), sent_at_chre_ms_(0), last_subscription_duration_ms_(0) {} bool ScanStats::operator==(const ScanStats &other) const { if (this == &other) { return true; } return num_scans_requested_by_nanoapp_ == other.num_scans_requested_by_nanoapp_ && num_scans_serviced_by_hardware_ == other.num_scans_serviced_by_hardware_ && num_scans_serviced_by_cache_ == other.num_scans_serviced_by_cache_ && updated_at_chre_ms_ == other.updated_at_chre_ms_ && sent_at_chre_ms_ == other.sent_at_chre_ms_ && last_subscription_duration_ms_ == other.last_subscription_duration_ms_ && channel_histogram_ == other.channel_histogram_ && scan_records_ == other.scan_records_ && rpc_log_records_ == other.rpc_log_records_; } flatbuffers::Offset ScanStats::Serialize( flatbuffers::FlatBufferBuilder *builder) const { auto histo = channel_histogram_.Serialize(builder); auto scan_recs = SerializeVector(scan_records_, builder); auto log_recs = SerializeVector(rpc_log_records_, builder); return fbs::CreateScanStats(*builder, num_scans_requested_by_nanoapp_, num_scans_serviced_by_hardware_, num_scans_serviced_by_cache_, updated_at_chre_ms_, sent_at_chre_ms_, last_subscription_duration_ms_, histo, scan_recs, log_recs); } bool ScanStats::Deserialize(const ScanStats::FbsType &fbs_stats) { const auto &histo = fbs_stats.channel_scan_count(); if (histo == nullptr || !channel_histogram_.Deserialize(*histo)) { LOGE("Failed to deserialize ScanStats. Null or incomplete members."); return false; } const auto &scan_recs = fbs_stats.scan_records(); if (scan_recs == nullptr || !DeserializeVector(*scan_recs, &scan_records_)) { LOGE("Failed to deserialize ScanStats. Null or incomplete members."); return false; } const auto &log_recs = fbs_stats.rpc_log_records(); if (log_recs == nullptr || !DeserializeVector(*log_recs, &rpc_log_records_)) { LOGE("Failed to deserialize ScanStats. Null or incomplete members."); return false; } num_scans_requested_by_nanoapp_ = fbs_stats.num_scans_requested_by_nanoapp(); num_scans_serviced_by_hardware_ = fbs_stats.num_scans_serviced_by_hardware(); num_scans_serviced_by_cache_ = fbs_stats.num_scans_serviced_by_cache(); updated_at_chre_ms_ = fbs_stats.updated_at_chre_ms(); sent_at_chre_ms_ = fbs_stats.sent_at_chre_ms(); last_subscription_duration_ms_ = fbs_stats.last_subscription_duration_ms(); return true; } } // namespace wifi_offload