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

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

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

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

相关文章

电容测试流程

一、外观检测 1. 目的&#xff1a;检验电容样品外观是否与规格书一致&#xff0c;制程工艺是否良好&#xff0c;确保部品的品质。 2. 仪器&#xff1a;放大镜 3. 测试说明&#xff1a; &#xff08;1&#xff09;样品上丝印与规格书中相符&#xff0c;丝印信息&#xff08;…

探索 .NET 9 控制台应用中的 LiteDB 异步 CRUD 操作

本文主要是使用异步方式&#xff0c;体验 litedb 基本的 crud 操作。 LiteDB 是一款轻量级、快速且免费的 .NET NoSQL 嵌入式数据库&#xff0c;专为小型本地应用程序设计。它以单一数据文件的形式提供服务&#xff0c;支持文档存储和查询功能&#xff0c;适用于桌面应用、移动…

leetcode刷题记录(四十二)——101. 对称二叉树

&#xff08;一&#xff09;问题描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/symmetric-tree/description/给你…

【一个简单的整数问题2——线段树】

题目 代码 下面的两个代码的区别在于modify的分类&#xff0c;modify最简单的分类方式是存在性分类&#xff0c;另一种类似某些query采用的三段式分类&#xff0c;详细见代码 存在性 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1…

从源码到应用:在线教育系统与教培网校APP开发实战指南

时下&#xff0c;各类教培网校APP逐渐成为教育机构的核心工具。那么&#xff0c;如何从源码出发&#xff0c;开发一套符合需求的在线教育系统与教培网校APP&#xff1f;本文将从架构设计、功能实现到部署上线&#xff0c;提供一份全面的开发实战指南。 一、在线教育系统的核心架…

vscode下面python调试报错ImportError: cannot import name ‘Literal‘ from ‘typing‘

1 问题描述 我在vscode下面编写python程序&#xff0c;这个程序是在一个英伟达anoconda环境下的项目。之前能运行能调试&#xff0c;最近发现只能运行ctlf5&#xff0c;但是使用f5进行调试时&#xff0c;报错“File “c:\Users\86137.vscode\extensions\ms-python.debugpy-202…

微知-ib_write_bw的各种参数汇总(-d -q -s -R --run_infinitely)

背景 经常忘记使用ib_write_bw打流的一些参数&#xff0c;特此整理记录在这里方便快速查阅。尤其是run_infinitely这个参数容易写错。 最简洁 ib_write_bw -d mlx5_0 # server ib_write_bw -d mlx5_0 1.1.1.1 # client常用参数 非常常用 -d mlx5_0, --ib-dev 指定ib设备&a…

智能外呼,轻松触达海外客户

在全球化的今天&#xff0c;海外市场已成为众多企业寻求增长的重要阵地。然而&#xff0c;如何高效、精准地触达海外客户&#xff0c;一直是企业面临的一大挑战。沃丰科技推出了智能外呼机器人&#xff0c;为企业打开了一扇通往海外市场的智慧之门。 沃丰科技外呼机器人的核心…

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构&#xff1a; 这几个表总数为100多万&#xff0c;经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图&#xff1a; 界面&#xff1a; SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…

Parker派克防爆电机在实际应用中的安全性能如何保证?

Parker防爆电机确保在实际应用中的安全性能主要通过以下几个方面来保证&#xff1a; 1.防爆外壳设计&#xff1a;EX系列电机采用强大的防爆外壳&#xff0c;设计遵循严格的防爆标准&#xff0c;能够承受内部可能发生的爆炸而不破损&#xff0c;利用间隙切断原理&#xff0c;防…

Django如何配置多个环境的MySQL数据库

在 Django 项目中配置多个环境的 MySQL 数据库是一个常见的需求&#xff0c;特别是在开发、测试和生产环境中使用不同的数据库配置。你可以通过在 settings.py 文件中使用条件语句或环境变量来实现这一点。 1. 使用环境变量 使用环境变量是一种灵活且安全的方式来配置多个环境…

如何在Word文件中设置水印以及如何禁止修改水印

在日常办公和学习中&#xff0c;我们经常需要在Word文档中设置水印&#xff0c;以保护文件的版权或标明文件的机密性。水印可以是文字形式&#xff0c;也可以是图片形式&#xff0c;能够灵活地适应不同的需求。但仅仅设置水印是不够的&#xff0c;有时我们还需要确保水印不被随…

Linux高阶——1123—

1、服务器基础 1、服务器基本概述 在CS架构下&#xff0c;client and server下&#xff0c;工程师研发服务器&#xff0c;经典的后端程序&#xff0c;为前端&#xff08;客户端&#xff09;提供数据处理支持、数据中转、数据持久化等功能&#xff0c;在互联网中&#xff0c;几…

网络通信从用户态到物理网络的完整发送和接收流程

1. 数据发送流程 用户程序调用系统调用 应用程序调用 write() 或 send()&#xff0c;将数据从用户空间传递到内核。系统调用接口&#xff08;如 sys_sendto 或 sys_write&#xff09;进入内核态。 内核查找套接字 内核根据文件描述符&#xff08;如 sockfd&#xff09;查找对…

鸿蒙NEXT开发案例:字数统计

【引言】 本文将通过一个具体的案例——“字数统计”组件&#xff0c;来探讨如何在鸿蒙NEXT框架下实现这一功能。此组件不仅能够统计用户输入文本中的汉字、中文标点、数字、以及英文字符的数量&#xff0c;还具有良好的用户界面设计&#xff0c;使用户能够直观地了解输入文本…

贪心算法(1)

目录 柠檬水找零 题解&#xff1a; 代码&#xff1a; 将数组和减半的最少操作次数&#xff08;大根堆&#xff09; 题解&#xff1a; 代码&#xff1a; 最大数&#xff08;注意 sort 中 cmp 的写法&#xff09; 题解&#xff1a; 代码&#xff1a; 摆动序列&#xff0…

数据结构(一)链表

目录 链表 单向链表 单向链表结构与基本操作 插入节点 删除节点 搜索节点 遍历链表 反转链表 双向链表 双向链表结构与基本操作 节点定义和创建 插入节点 删除节点 搜索节点 遍历链表 转链表反 在开始讲线性表之前&#xff0c;先给各位读者重新回顾一下链表 链…

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

微软发布Win11 24H2系统11月可选更新KB5046740!

系统之家11月22日报道&#xff0c;微软针对Win11 24H2系统推出2024年11月最新可选更新补丁KB5046740&#xff0c;更新后系统版本后升至26100.2454&#xff0c;此次更新后修复当应用程序以PDF和XLSX格式导出图表对象时停止响应、无法使用API查找旋转信息等问题。以下小编将给大家…

五天SpringCloud计划——DAY2之使用Docker完成项目的部署

一、引言 刚刚学完了Docker的使用&#xff0c;现在知识在脑子里面还是热乎的&#xff0c;是时候把它总结一下了。 现在的我认为Docker时一个部署项目的工具(不知道是不是真的),相比于我以前使用宝塔面板部署项目&#xff0c;使用Docker更能让我看到代码之美&#xff0c;怎么一…