11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/* 21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project 31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License. 61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at 71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * 101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software 111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and 141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License. 151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 171754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#ifndef INCIDENT_SERVICE_H 181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#define INCIDENT_SERVICE_H 191754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 201754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include "Reporter.h" 211754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 221754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <android/os/BnIncidentManager.h> 231754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <utils/Looper.h> 241754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 251754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <deque> 261754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#include <mutex> 271754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 281754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android; 291754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::base; 301754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::binder; 311754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace android::os; 321754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratousing namespace std; 331754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 341754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass ReportRequestQueue : public virtual RefBase 361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ReportRequestQueue(); 391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~ReportRequestQueue(); 401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void addRequest(const sp<ReportRequest>& request); 421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ReportRequest> getNextRequest(); 431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mutex mLock; 461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato deque<sp<ReportRequest> > mQueue; 471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 491754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass ReportHandler : public MessageHandler 521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{ 531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato ReportHandler(const sp<Looper>& handlerLooper, const sp<ReportRequestQueue>& queue); 551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~ReportHandler(); 561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 571754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual void handleMessage(const Message& message); 581754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 591754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato /** 601754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Adds a ReportRequest to the queue. 611754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 621754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void scheduleRunReport(const sp<ReportRequest>& request); 631754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 641754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato /** 651754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Resets mBacklogDelay to the default and schedules sending 661754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * the messages to dropbox. 671754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 681754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void scheduleSendBacklogToDropbox(); 691754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 701754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 711754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato mutex mLock; 721754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato nsecs_t mBacklogDelay; 731754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<Looper> mHandlerLooper; 741754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ReportRequestQueue> mQueue; 751754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 761754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato /** 771754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Runs all of the reports that have been queued. 781754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 791754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void run_report(); 801754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 811754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato /** 821754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Schedules a dropbox task mBacklogDelay nanoseconds from now. 831754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 841754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void schedule_send_backlog_to_dropbox_locked(); 851754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 861754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato /** 871754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Sends the backlog to the dropbox service. 881754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */ 891754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato void send_backlog_to_dropbox(); 901754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 911754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 921754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 931754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato// ================================================================================ 941754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoclass IncidentService : public BnIncidentManager { 951754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratopublic: 961754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato IncidentService(const sp<Looper>& handlerLooper); 971754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual ~IncidentService(); 981754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 991754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual Status reportIncident(const IncidentReportArgs& args); 1001754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1011754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual Status reportIncidentToStream(const IncidentReportArgs& args, 1021754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato const sp<IIncidentReportStatusListener>& listener, const unique_fd& stream); 1031754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1041754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato virtual Status systemRunning(); 1051754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1061754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratoprivate: 1071754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ReportRequestQueue> mQueue; 1081754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato sp<ReportHandler> mHandler; 1091754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}; 1101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato 1121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato#endif // INCIDENT_SERVICE_H 113