/*
* Copyright 2019 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 "tuningfork.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*VoidCallback)();
typedef void (*ProtoCallback)(const CProtobufSerialization*);
// Load settings from assets/tuningfork/tuningfork_settings.bin.
// Returns true and fills 'settings' if the file could be loaded.
// Ownership of settings is passed to the caller: call
// CProtobufSerialization_Free to deallocate any memory.
// Returns false if the file was not found or there was an error.
bool TuningFork_findSettingsInAPK(JNIEnv* env, jobject activity,
CProtobufSerialization* settings);
// Load fidelity params from assets/tuningfork/dev_tuningfork_fidelityparams_#.bin.
// Call once with fps=NULL to get the number of files in fp_count.
// The call a second time with a pre-allocated array of size fp_count in fps.
// Ownership of serializations is passed to the caller: call
// CProtobufSerialization_Free to deallocate any memory.
void TuningFork_findFidelityParamsInAPK(JNIEnv* env, jobject activity,
CProtobufSerialization* fps,
int* fp_count);
// Initialize tuning fork and automatically inject tracers into Swappy.
// If Swappy is not available or could not be initialized, the function returns
// false.
// When using Swappy, there will be 2 default tick points added and the
// histogram settings need to be coordinated with your swap rate.
// If you know the shared library in which Swappy is, pass it in libraryName.
// If libraryName is NULL or TuningFork cannot find Swappy in the library, the
// function will look in the current module and then try in order:
// [libgamesdk.so, libswappy.so, libunity.so]
// frame_callback is called once per frame: you can set any Annotations
// during this callback if you wish.
bool TuningFork_initWithSwappy(const CProtobufSerialization* settings,
JNIEnv* env, jobject activity,
const char* libraryName,
VoidCallback frame_callback);
// Set a callback to be called on a separate thread every time TuningFork
// performs an upload.
void TuningFork_setUploadCallback(ProtoCallback cbk);
// This function calls initWithSwappy and also performs the following:
// 1) Settings and default fidelity params are retrieved from the APK.
// 2) A download thread is activated to retrieve fideloty params and retries are
// performed until a download is successful or a timeout occurs.
// 3) Downloaded params are stored locally and used in preference of default
// params when the app is started in future.
// fpDefaultFileNum is the index of the dev_tuningfork_fidelityparams_#.bin file you
// wish to use when there is no download connection and no saved params. It has a
// special meaning if it is negative: in this case, saved params are reset to
// dev_tuningfork_fidelity_params_(-$fpDefaultFileNum).bin
// fidelity_params_callback is called with any downloaded params or with default /
// saved params.
// initialTimeoutMs is the time to wait for an initial download. The fidelity_params_callback
// will be called after this time with the default / saved params if no params
// could be downloaded..
// ultimateTimeoutMs is the time after which to stop retrying the download.
// The following error codes may be returned:
enum TFErrorCode {
TFERROR_OK = 0, // No error
TFERROR_NO_SETTINGS = 1, // No tuningfork_settings.bin found in assets/tuningfork.
TFERROR_NO_SWAPPY = 2, // Not able to find Swappy.
TFERROR_INVALID_DEFAULT_FIDELITY_PARAMS = 3, // fpDefaultFileNum is out of range.
TFERROR_NO_FIDELITY_PARAMS = 4 // No dev_tuningfork_fidelityparams_#.bin found
// in assets/tuningfork.
};
TFErrorCode TuningFork_initFromAssetsWithSwappy(JNIEnv* env, jobject activity,
const char* libraryName,
VoidCallback frame_callback,
int fpDefaultFileNum,
ProtoCallback fidelity_params_callback,
int initialTimeoutMs, int ultimateTimeoutMs);
#ifdef __cplusplus
}
#endif