blob: 4e90871d4894d1eafad024f8930d584010a3e831 [file] [log] [blame]
Avichal Rakesh74b5ae72023-12-27 16:56:45 -08001/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_SERVERS_CAMERA_UTILS_H
18#define ANDROID_SERVERS_CAMERA_UTILS_H
19
Emilian Peev31bd2422024-04-23 22:24:09 +000020#include <sched.h>
21#include <unistd.h>
22
Avichal Rakesh74b5ae72023-12-27 16:56:45 -080023namespace android {
24
25/**
26 * As of Android V, ro.board.api_level returns the year and month of release (ex. 202404)
27 * instead of release SDK version. This function maps year/month format back to release
28 * SDK version.
29 *
30 * Returns defaultVersion if the property is not found.
31 */
32int getVNDKVersionFromProp(int defaultVersion);
33
Emilian Peev31bd2422024-04-23 22:24:09 +000034/**
35 * An instance of this class will raise the scheduling policy of a given
36 * given thread to real time and keep it this way throughout the lifetime
37 * of the object. The thread scheduling policy will revert back to its original
38 * state after the instances is released. By default the implementation will
39 * raise the priority of the current thread unless clients explicitly specify
40 * another thread id.
41 * Client must avoid:
42 * - Keeping an instance of this class for extended and long running operations.
43 * This is only intended for short/temporarily priority bumps that mitigate
44 * scheduling delays within critical camera paths.
45 * - Allocating instances of this class on the memory heap unless clients have
46 * complete control over the object lifetime. It is preferable to allocate
47 * instances of this class on the stack instead.
48 * - Nesting multiple instances of this class using the same default or same thread id.
49 */
50class RunThreadWithRealtimePriority final {
51 public:
52 RunThreadWithRealtimePriority(int tid = gettid());
53 ~RunThreadWithRealtimePriority();
54
55 RunThreadWithRealtimePriority(const RunThreadWithRealtimePriority&) = delete;
56 RunThreadWithRealtimePriority& operator=(const RunThreadWithRealtimePriority&) = delete;
57
58 // SCHED_FIFO priority for request submission thread in HFR mode
59 static const int kRequestThreadPriority = 1;
60
61 private:
62 int mTid;
63 int mPreviousPolicy;
64 bool mPolicyBumped = false;
65 struct sched_param mPreviousParams;
66};
67
Avichal Rakesh74b5ae72023-12-27 16:56:45 -080068} // namespace android
69
70#endif //ANDROID_SERVERS_CAMERA_UTILS_H