功耗中蓝牙扫描事件插桩埋点

server/2024/11/25 2:26:14/

手机功耗中蓝牙扫描事件插桩埋点

功耗主要监控蓝牙扫描的时间和次数,进而换算为频次监控。其中不同的蓝牙扫描模式带来的功耗影响也是不一样的。
功耗影响度低延迟扫描>平衡模式扫描>低功耗模式。例如某款机型分别为:低延迟扫描 14.64mA,平衡模式扫描4.64mA,低功耗模式0.64mA
例如:亮屏车控界面使用低延迟扫描;车控后台且手机非doze状态使用平衡模式扫描;手机处于doze场景采用低功耗模式扫描。

蓝牙扫描事件开始埋点

android/qssi/packages/modules/Bluetooth/framework/java/android/bluetooth/le/BluetoothLeScanner.java

具体位于:BluetoothLeScanner.onScannerRegistered 进行插桩埋点

521          /**
522           * Application interface registered - app is ready to go
523           */
524          @Override
525          public void onScannerRegistered(int status, int scannerId) {
526              Log.d(TAG, "onScannerRegistered() - status=" + status
527                      + " scannerId=" + scannerId + " mScannerId=" + mScannerId);
528              synchronized (this) {
529                  if (status == BluetoothGatt.GATT_SUCCESS) {
530                      try {
531                          final SynchronousResultReceiver recv = SynchronousResultReceiver.get();
532                          if (mScannerId == -1) {
533                              // Registration succeeds after timeout, unregister scanner.
534                              mBluetoothGatt.unregisterScanner(scannerId, mAttributionSource, recv);
535                          } else {
536                              mScannerId = scannerId;
537                              mBluetoothGatt.startScan(mScannerId, mSettings, mFilters,
538                                      mAttributionSource, recv);
539                              // 蓝牙扫描开始事件埋点,其中不同蓝牙模式的功耗是不一样的
540                              PowerTrack.get().sendEvent(BLUETOOTH_START_SCAN, mAttributionSource.getUid(),
541                                      mAttributionSource.getPackageName() + "|" + mSettings.getScanMode() + "|" + mScannerId);
542                              // 蓝牙扫描开始事件埋点
543                          }
544                          recv.awaitResultNoInterrupt(getSyncTimeout()).getValue(null);
545                      } catch (TimeoutException | RemoteException e) {
546                          Log.e(TAG, "fail to start le scan: " + e);
547                          mScannerId = -1;
548                      }
549                  } else if (status == ScanCallback.SCAN_FAILED_SCANNING_TOO_FREQUENTLY) {
550                      // applicaiton was scanning too frequently
551                      mScannerId = -2;
552                  } else {
553                      // registration failed
554                      mScannerId = -1;
555                  }
556                  notifyAll();
557              }
558          }

蓝牙扫描结束事件埋点

android/qssi/packages/modules/Bluetooth/framework/java/android/bluetooth/le/BluetoothLeScanner.java

具体位于:BluetoothLeScanner.stopLeScan 进行插桩埋点

478          @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)
479          public void stopLeScan() {
480              synchronized (this) {
481                  if (mScannerId <= 0) {
482                      Log.e(TAG, "Error state, mLeHandle: " + mScannerId);
483                      return;
484                  }
485                  try {
486                      final SynchronousResultReceiver recv = SynchronousResultReceiver.get();
487                      mBluetoothGatt.stopScan(mScannerId, mAttributionSource, recv);
488                      recv.awaitResultNoInterrupt(getSyncTimeout()).getValue(null);
489                      // 蓝牙扫描结束事件埋点
490                      PowerTrack.get().sendEvent(BLUETOOTH_STOP_SCAN, mAttributionSource.getUid(),
491                              mAttributionSource.getPackageName() + "|" + mSettings.getScanMode() + "|" + mScannerId);
492                      // 蓝牙扫描结束事件埋点
493  
494                      final SynchronousResultReceiver recv2 = SynchronousResultReceiver.get();
495                      mBluetoothGatt.unregisterScanner(mScannerId, mAttributionSource, recv2);
496                      recv2.awaitResultNoInterrupt(getSyncTimeout()).getValue(null);
497                  } catch (TimeoutException | RemoteException e) {
498                      Log.e(TAG, "Failed to stop scan and unregister", e);
499                  }
500                  mScannerId = -1;
501              }
502          }

http://www.ppmy.cn/server/144684.html

相关文章

Nginx解决跨域问题的案例演示

介绍跨域问题前&#xff0c;首先了解浏览器的同源策略(Same-Origin Policy) 同源策略 同源策略是一种浏览器安全机制&#xff0c;限制了从一个源加载的文档或脚本与另一个源的资源进行交互的能力。 同源的定义 如果两个URL的协议、域名(IP)、端口号均相同&#xff0c;则它们…

libphone desktop编译

linphone-desktop 在ubuntu20.04 下编译 linphone 介绍 Linphone是一款遵循GPL的开源网络视频电话系统&#xff0c;支持多种平台如Windows、Linux、Android等。它基于SIP协议&#xff0c;提供语音、视频通话及即时文本消息功能。核心功能包括SIP用户代理、音频视频Codec支持、…

经验笔记:Git 中的远程仓库链接及上下游关系管理

Git 中的远程仓库链接及上下游关系管理 1. 远程仓库的链接信息 当你克隆一个远程仓库时&#xff0c;Git 会在本地仓库中记录远程仓库的信息。这些信息包括远程仓库的 URL、默认的远程名称&#xff08;通常是 origin&#xff09;&#xff0c;以及远程仓库中的所有分支和标签。…

解决 Git 默认分支不一致问题:最佳实践与解决方案20241120

解决 Git 默认分支不一致问题&#xff1a;最佳实践与解决方案 在现代开发工作流中&#xff0c;Git 是一款不可或缺的代码版本管理工具&#xff0c;尤其是结合 GitHub、Gitee 等平台的远程仓库进行协作时。最近&#xff0c;我在使用 macOS 作为开发环境时遇到了一个经典但容易忽…

网络安全与加密

1.Base64简单说明描述&#xff1a;Base64可以成为密码学的基石&#xff0c;非常重要。特点&#xff1a;可以将任意的二进制数据进行Base64编码结果&#xff1a;所有的数据都能被编码为并只用65个字符就能表示的文本文件。65字符&#xff1a;A~Z a~z 0~9 / 对文件进行base64编码…

数学建模学习(138):基于 Python 的 AdaBoost 分类模型

1. AdaBoost算法简介 AdaBoost(Adaptive Boosting)是一种经典的集成学习算法,由Yoav Freund和Robert Schapire提出。它通过迭代训练一系列的弱分类器,并将这些弱分类器组合成一个强分类器。算法的核心思想是:对于被错误分类的样本,在下一轮训练中增加其权重;对于正确分类…

C# 程序,内存会被占满的问题,尝试清理下内存吧

引用个动态库 [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint "SetProcessWorkingSetSize", ExactSpelling true, CharSet System.Runtime.InteropServices.CharSet.Ansi, SetLastError true)]private static extern…

c#:winform引入bartender

1、vs新建项目 ①选择Windows窗体应用&#xff08;.NET Framework&#xff09; 2、将bartender引入vs中 ①找到bartender的安装目录&#xff0c;复制Seagull.BarTender.Print.dll文件 ②粘贴到项目->bin->Debug文件&#xff0c;并可创建Model文件夹&#xff1a;为了存放…