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

news2024/11/24 20:40:52

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【阵列信号处理】相干信号和非相干信号生成

文章目录 一、总结二、知识点相干&#xff08;coherent&#xff09;和非相干&#xff08;incoherent&#xff09;信号相干信号生成代码 相关信号&#xff08;correlated signal&#xff09;相关信号生成代码 正交信号定义 本文记录博主的科研日记。如果对博主的其他文章感兴趣&…

vue3项目部署在阿里云轻量应用服务器上

文章目录 概要整体部署流程技术细节小结 概要 vue3前端项目部署在阿里云轻量服务器 整体部署流程 首先有一个Vue3前端项目和阿里云应用服务器 确保环境准备 如果是新的服务器&#xff0c;在服务器内运行以下命令更新软件包 sudo apt update && sudo apt upgrade -y …

东土科技孵化的“网联汽车高速通信技术”前沿产品亮相2024WICV大会

2024世界智能网联汽车大会&#xff08;WICV&#xff09;于近日在北京召开。本次大会发布了由中国汽车工程学会组织全球200余位专家&#xff0c;联合评审遴选出未来十年对于智能网联汽车发展具有重要影响的十大技术趋势&#xff0c;包括“面向高级别自动驾驶的超级人工智能”“网…

【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践

文章目录 一、前言二、什么是“纵深安全防御”&#xff1f;三、为什么有必要采用纵深安全防御策略&#xff1f;四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…

关于相机选型的一些参数说明

上一篇&#xff1a;关于相机的一些参数计算&#xff08;靶面、视野等&#xff09; 目录 1.卷帘快门和全局快门1.1 卷帘快门1.2 全局快门PS&#xff1a;视觉伺服与快门选择 2.黑白和彩色3.CCD和CMOS3.1 CCD3.2 CMOSCCD VS CMOS 4.面阵和线扫4.1 面阵4.2 线扫4.3 面阵 VS 线扫 5.…

C 语言复习总结记录二

C 语言复习总结记录二 一 控制语句 1、语句的分类 表达式语句函数调用语句复合语句控制语句空语句 控制语句 控制程序的执行流程&#xff0c;实现程序的各种结构方式 C 语言支持三种结构 &#xff1a;顺序结构、选择结构、循环结构&#xff0c;由特定的语句定义符组成C语言…

【mongodb】社区版8:改变配置bindip和授权

更改配置 sudo systemctl restart mongod (base) root@k8s-master-pfsrv:/home/zhangbin# sudo tail -n 20 /var/log/mongodb/mongod.log 日志感觉是成功了:{"t":{"$date":"2024-11-19T19:57:47.076+08:00"

28.UE5游戏框架,事件分发器,蓝图接口

3-3 虚幻游戏框架拆解&#xff0c;游戏规则基础_哔哩哔哩_bilibili 目录 1.游戏架构 2.事件分发器 2.1UI控件中的事件分发器 2.2Actor蓝图中的事件分发器 2.2.1动态决定Actor的分发事件 2.2.2父类中定义事件分发器&#xff0c;子类实现事件分发器 2.3组件蓝图中实现事件…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制&#xff1a;256MB 时间限制&#xff1a;1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟&#xff0c;没有吃上早饭。于是你骑着自行车去超市&#xff0c;但是你又发现商店的工作人员已经重新贴上了价格标签&#xff0c;零食价格都涨了50%。你…

挂壁式空气净化器哪个品牌的质量好?排名top3优秀产品测评分析

随着挂壁式空气净化器市场的不断扩大&#xff0c;各类品牌与型号琳琅满目。但遗憾的是&#xff0c;一些跨界网红品牌过于追求短期效益&#xff0c;导致产品在净化效果与去除异味方面表现平平&#xff0c;使用体验不佳&#xff0c;甚至可能带来二次污染风险&#xff0c;影响人体…

贴代码框架PasteForm特性介绍之image

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

C++异常: cv::Exception 解决

原因是C中文件路径错误&#xff0c;\ 号在字符串中表示转义字符&#xff0c;"C:\Users\14421\Desktop\123.png" "C:Usersd21DesktopS.png" &#xff0c;所以应该改为 C:\\Users\\14421\\Desktop\\123.png 或者 C:/Users/14421/Desktop/123.png 即可解决问…

libphone desktop编译

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

高精度计算题目合集

高精度计算题目合集 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 高精度加法原理&#xff1a; a&#xff0c;b&#xff0c;c 都可以用数组表示。这些都是基于c语言的算术运算符形成的运算。 c 3 ( c 1 c 2 ) % 10 c_3(c_1c_2)\%1…

【Python】爬虫实战:高效爬取电影网站信息指南(涵盖了诸多学习内容)

本期目录 1 爬取思路 2 爬虫过程 2.1 网址 2.2 查看网页代码 3 爬取数据 3.1 导入包 3.2 爬取代码 01 爬取思路 \*- 第一步&#xff0c;获取页面内容\*- 第二步&#xff1a;解析并获取单个项目链接 \*- 第三步&#xff1a;获取子页面内容 \*- 第四步&#xff1a;解析…

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时&#xff0c;训练损失异常大 问题分析 问题 training_loss异常大&#xff0c;在二分类损失中&#xff0c;收敛在1~2附近&#xff0c;而eval_loss却正常&#xff08;小于0.5&#xff09; 分析 参考&#xff1a; Bug in gradient accumulation…

uni-app 认识条件编译,了解多端部署

一. 前言 在使用 uni-app 进行跨平台开发的过程中&#xff0c;经常会遇到需要针对不同平台或不同环境进行条件编译的情况。条件编译是一种在编译过程中根据指定条件选择不同代码路径的技术&#xff0c;可以帮助我们在不同平台或环境下编写不同的代码&#xff0c;以适应不同的平…

HarmonyOS Next原创项目

学友市集 HarmonyOS毕设,项目完整,代码原创,可接毕设 项目展示 项目简介 学友集市是一款基于HarmonyOS Next开发的二手交易平台,适配HarmonyOS5.0&#xff0c;采用前后端分离架构&#xff0c;致力于为用户提供安全、便捷、高品质的二手商品交易服务。平台整合了华为云认证服…

现代密码学

概论 计算机安全的最核心三个关键目标&#xff08;指标&#xff09;/为&#xff1a;保密性 Confidentiality、完整性 Integrity、可用性 Availability &#xff0c;三者称为 CIA三元组 数据保密性&#xff1a;确保隐私或是秘密信息不向非授权者泄漏&#xff0c;也不被非授权者使…

深度学习实战人脸识别

文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…