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

devtools/2024/11/24 22:49:41/

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

功耗主要监控蓝牙扫描的时间和次数,进而换算为频次监控。其中不同的蓝牙扫描模式带来的功耗影响也是不一样的。
功耗影响度低延迟扫描>平衡模式扫描>低功耗模式。例如某款机型分别为:低延迟扫描 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/devtools/136664.html

相关文章

通义千问综合代码能力测试:制作web版五子棋

前不久申请了千问的代码模式&#xff0c;最近发现出现了这个入口&#xff0c;看来是通过了&#xff0c;是时候测试一下了。之前用claude做过游戏&#xff0c;效果不错Claude生成游戏测试&#xff1a;俄罗斯方块 - 集成InsCode快来阅读并即时体验吧~ 但这个五子棋就先不调整了&a…

数据结构与算法——1120——时间空间效率问题求边界值

目录 1、效率问题 1、时间复杂度 1、O(1) 2、O(n) 3、O(n) 或O(n*log2n)——n倍的log以2为底n的对数 例题 4、O(n) 2、空间复杂度 3、数组和链表 2、面试题之求边界值 题目 解答 &#xff08;1&#xff09;-i &#xff08;2&#xff09;~i &#xff08;3&#x…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

迈向AI驱动的数据新时代:探索SQL Server 2025的全新向量数据库

随着科技的飞速发展&#xff0c;数据已成为推动各行各业进步的重要动力。而在这个数据爆炸的时代&#xff0c;如何高效地存储、检索和分析数据&#xff0c;成为了摆在我们面前的一大挑战。幸运的是&#xff0c;微软SQL Server 2025的推出&#xff0c;为我们带来了全新的向量数据…

XCVU13P板卡设计原理图:509-基于XCVU13P的4路QSFP28光纤PCIeX16收发卡

一、板卡概述 基于XCVU13P的4路QSFP28光纤PCIeX16收发卡。该板卡要求符合PCIe 3.0标准&#xff0c;包含一片XCVU13P-2FLGA2014I、4组64-bit/8GB DDR4&#xff1b;4路QSFP28 4X光纤&#xff0c;每路光纤支持4X25Gbps&#xff0c;双向&#xff1b;支持32路IO。板卡工作温…

数据检索是什么意思?数据检索包括哪几个

不少用户会提出这样的疑问&#xff0c;数据检索是什么意思&#xff1f;数据检索即把数据库中存储的数据根据用户的需求提取出来&#xff0c;选择适合的数据库检索方式需要根据具体的需求和场景来进行判断。数据检索的结果会生成一个数据表&#xff0c;既可以放回数据库&#xf…

气膜场馆照明设计:科技与环保的完美结合—轻空间

气膜场馆的照明设计&#xff0c;选用高效节能的400瓦LED灯具&#xff0c;结合现代节能技术&#xff0c;提供强大而均匀的光照。LED灯具在光效和寿命方面优势显著&#xff0c;不仅降低运营能耗&#xff0c;还有效减少碳排放&#xff0c;为绿色场馆建设贡献力量。 科学分布&…

纯js实现游戏加农炮

项目简介 这是一个使用 HTML、CSS 和 jQuery 开发的简单射击游戏。以下是项目的详细描述&#xff1a; 项目名称&#xff1a;加农炮气球射击游戏 技术栈&#xff1a; HTML5 CSS3 jQuery 3.6.0 游戏特点&#xff1a; 简单易上手&#xff1a;只需点击鼠标即可操作&#xff0c;适合…