מדידה של ערכי עוצמה

יצרני המכשירים צריכים לספק פרופיל כוח של רכיב ב-/frameworks/base/core/res/res/xml/power_profile.xml.

כדי לקבוע ערכים לפרופילי צריכת החשמל, צריך להשתמש בחומרה שממדדת את צריכת החשמל של המכשיר ומבצעת את הפעולות השונות שעבורן נדרש המידע. מודדים את צריכת החשמל במהלך הפעולות האלה ומחשבים את הערכים (לפי ההבדלים בין שימושים אחרים בחשמל בסיסי), לפי הצורך).

המטרה של פרופיל אספקת החשמל היא להעריך את התרוקנות הסוללה בצורה נכונה, ערכי פרופיל הכוח נתונים בזרם (אמפר). מסגרת Android מכפילה את המתח בזמן שבו מערכת המשנה הייתה פעילה ומחשבת את הערך ב-mAh, שמשמשים להערכת כמות האנרגיה שנצרכה על ידי האפליקציה או מערכת המשנה.

מכשירים עם בקרי Bluetooth, מודם ו-Wi-Fi שבהם פועלת מערכת Android 7.0 ואילך יכולים לספק ערכי חשמל נוספים שמתקבלים מנתוני ערכת השבבים.

מכשירים עם מעבדים הטרוגניים

פרופיל צריכת האנרגיה של מכשירים עם ליבות CPU בארכיטקטורה הטרוגנית חייב לכלול את השדות הנוספים הבאים:

  • המספר הכולל של יחידות המעבד (CPU) לכל אשכול (מבוטא ב-cpu.clusters.cores).
  • מהירויות המעבד (CPU) שנתמכות על ידי כל אשכול.
  • צריכת האנרגיה הפעילה של המעבד בכל אשכולות.

כדי להבחין בין צריכת החשמל של המעבד (CPU) הפעיל לבין מהירויות המעבד (CPU) הנתמכות באשכולות, מוסיפים את מספר האשכול לשם המערך. מספרי האשכולות מוקציים לפי סדר הליבות של המעבד (CPU) בעץ המכשיר של הליבה. לדוגמה, בארכיטקטורה הטרוגנית שיש בה שני (2) אשכולות עם ארבע (4) ליבות:

  • אשכול 0 מורכב מ-cpu0-3
  • cluster1 מורכב מ-cpu4-7

מסגרת Android משתמשת במספרי הליבות האלה של המעבד כשהיא קוראת נתונים סטטיסטיים מהקבצים sysfs שבספרייה: /sys/devices/system/cpu/cpu<number>/cpufreq/stats.

דוגמה למעבדי CPU ומהירויות של אשכולות:

<array name="cpu.active.cluster0">
<value>200</value>
<value>300</value>
<value>400</value>
</array>
<array name="cpu.speeds.cluster0">
<value>600000</value>
<value>800000</value>
<value>1200000</value>
</array>

<array name="cpu.active.cluster1">
<value>400</value>
<value>500</value>
<value>600</value>
</array>
<array name="cpu.speeds.cluster1">
<value>800000</value>
<value>1200000</value>
<value>1400000</value>
</array>

ערכי עוצמה

בטבלה הבאה מתוארות ההגדרות הזמינות של ערך אספקת החשמל. כדי להציג את הקובץ לדוגמה ב-AOSP, אפשר לעיין בקובץ power_profile.xml.

שם תיאור ערך לדוגמה הערות
Ambia.on צריכת חשמל נוספת כשהמסך במצב 'נמנום'/'סביבה'/'פועל כל הזמן' במקום במצב 'כבוי'. בערך 100 mA -
screen.on צריכת האנרגיה הנוספת כשהמסך מופעל בהבהירות מינימלית. 200 מיליאמפר לשעה כולל שלט מגע ותאורה אחורית של המסך. בהגדרת בהירות 0, ולא בהגדרה המינימלית של Android, שמשתנה בדרך כלל בין 10% ל-20%.
screen.full. צריכת האנרגיה הנוספת כשהמסך בהיר במלואו, בהשוואה למסך בהיר במינימום. 100 mA-300 mA כדי לחשב את צריכת החשמל של המסך, נוסף חלק מהערך הזה (על סמך בהירות המסך) לערך screen.on.
wifi.on צריכת החשמל הנוספת כשה-Wi-Fi מופעל אבל לא מקבל, משדר או סורק. 2 mA -
wifi.active צריכת אנרגיה נוספת במהלך שליחה או קבלה בחיבור Wi-Fi. 31 mA -
wifi.scan צריכת אנרגיה נוספת כשה-Wi-Fi סורק נקודות גישה. 100 מיליאמפר לשעה -
אודיו צריכת חשמל נוספת במהלך פענוח או קידוד אודיו באמצעות DSP. כ-10 מיליאמפר לשעה משמש לאודיו DSP.
סרטון צריכת האנרגיה הנוספת בזמן פענוח הווידאו באמצעות DSP. בערך 50 mA משמש לווידאו של DSP.
camera.avg צריכת האנרגיה הממוצעת של מערכת המשנה של המצלמה באפליקציית מצלמה רגילה. 600 mA ההערכה היא לצורך אפליקציה שמריצה תצוגה מקדימה ומצלמת כ-10 תמונות ברזולוציה מלאה לדקה.
camera.flashlight ההספק הממוצע שבו משתמש מודול הפלאש של המצלמה כשהוא מופעל. 200 מיליאמפר לשעה -
gps.signalqualitybased צריכת החשמל הנוספת של ה-GPS על סמך עוצמת האות. זוהי רשומה עם כמה ערכים, אחד לכל עוצמת אות, מהחלשה ביותר לחזקה ביותר. 30 מיליאמפר לשעה, 10 מיליאמפר לשעה -
gps.on צריכת אנרגיה נוספת כש-GPS מקבל אות. 50 mA -
radio.active צריכת אנרגיה נוספת כשהמכשיר משדר או מקבל נתונים ברדיו הסלולרי. 100 mA-300 mA -
radio.scanning צריכת חשמל נוספת כשהרדיו הסלולרי עובר למגדל. 1.2 mA -
רדיו.on צריכת חשמל נוספת כשהרדיו הסלולרי מופעל. זוהי רשומה עם כמה ערכים, אחד לכל עוצמת אות (ללא אות, חלשה, בינונית, חזקה). 1.2 mA חלק מהמכשירים מגדילים את עוצמת האות כשהם מחפשים תורן סלולרי ולא מזהים אות. הערכים יכולים להיות זהים או לרדת ככל שעוצמת האות עולה. אם תספקו רק ערך אחד, המערכת תשתמש באותו ערך לכל נקודות החוזק. אם מציינים שני ערכים, המערכת משתמשת בערך הראשון כשאין קליטה, בערך השני כשהעוצמה היא חלשה וכן הלאה.
bluetooth.controller.idle צריכת הזרם הממוצעת (mA) של בקר ה-Bluetooth במצב חוסר פעילות. - הערכים האלה לא מוערכים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קליטה או שידור, המערכת מחשבת את הממוצע של המצבים האלה. בנוסף, המערכת אוספת עכשיו נתונים עבור סריקות עם צריכת אנרגיה נמוכה (LE) ו-Bluetooth.

ב-Android מגרסה 7.0 ואילך כבר לא נעשה שימוש בערכי החשמל של Bluetooth ל-Bluetooth.active (משמש להפעלת אודיו דרך Bluetooth A2DP) ול-Bluetooth (משמש כש-Bluetooth מופעל אבל אין פעילות).
bluetooth.controller.rx צריכת הזרם הממוצעת (mA) של בקר ה-Bluetooth במצב קבלה. -
bluetooth.controller.tx רמת הטעינה הנוכחית הממוצעת (mA) של בקר ה-Bluetooth במהלך השידור. -
bluetooth.controller.voltage מתח הפעלה ממוצע (mV) של בקר ה-Bluetooth. -
modem.controller.sleep צריכת הזרם הממוצעת (mA) של בקר המודם במצב שינה. 0 mA הערכים האלה לא מוערכים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מדינות בארה"ב, המערכת מחשבת את הממוצע של המדינות האלה. אם יש כמה מצבי שידור, אפשר לציין ערך לכל מצב שידור החל מ-Android 9.
modem.controller.idle צריכת הזרם הממוצעת (mA) של בקר המודם במצב חוסר פעילות. -
modem.controller.rx צריכת הזרם הממוצעת (mA) של בקר המודם במצב קבלה. -
modem.controller.tx צריכת הזרם הממוצעת (mA) של בקר המודם במהלך שידור ברמות שונות של הספק RF. זוהי רשומה עם כמה ערכים, עם ערך אחד לכל רמת עוצמת שידור. 100 mA, ‏ 200 mA, ‏ 300 mA, ‏ 400 mA, ‏ 500 mA
modem.controller.voltage מתח הפעלה ממוצע (mV) של בקר המודם. -
wifi.controller.idle ערך ממוצע של mA (mA) של בקר ה-Wi-Fi במצב ללא פעילות. - הערכים האלה לא מוערכים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קליטה או שידור, המערכת מחשבת את הממוצע של המצבים האלה.
wifi.controller.rx, צריכת הזרם הממוצעת (mA) של בקר ה-Wi-Fi במצב קבלה. -
wifi.controller.tx רמת הטעינה הנוכחית (mA) הממוצעת של בקר ה-Wi-Fi במהלך השידור. -
wifi.controller.voltage מתח הפעלה ממוצע (mV) של בקר ה-Wi-Fi. -
cpu.speeds זוהי רשומה עם מספר ערכים שמפרטת את כל מהירויות המעבד האפשריות ב-KHz. 125,000 KHz, 250,000 KHz, 500,000 KHz, 1000,00 KHz, 1500,000 KHz המספר והסדר של הרשומות צריכים להתאים לרשומות ה-mA ב-cpu.active.
cpu.idle צריכת החשמל הכוללת של המערכת כשמעבדי ה-CPU (וה-SoC) נמצאים במצב השהיה של המערכת. 3 mA -
cpu.awake צריכת חשמל נוספת כשמעבדי ה-CPU נמצאים במצב זמן השהיה לצורכי תזמון (לולאת זמן השהיה בליבה). המערכת לא נמצאת במצב השהיה של המערכת. 50 mA יכול להיות שלפלטפורמה יש יותר ממצב אחד של חוסר פעילות עם רמות שונות של צריכת חשמל. צריך לבחור מצב מנוחה מייצג לתקופות ארוכות יותר של חוסר פעילות של מתזמן (כמה אלפיות שנייה). בודקים את תרשים צריכת החשמל בציוד המדידה ובוחרים דגימות שבהן צריכת החשמל של המעבד היא הנמוכה ביותר, ומבטלים דגימות עם צריכת חשמל גבוהה יותר שבהן המעבד יצא ממצב מנוחה.
cpu.active צריכת החשמל הנוספת של מעבדים כשהם פועלים במהירויות שונות. 100 mA, ‏ 120 mA, ‏ 140 mA, ‏ 160 mA, ‏ 200 mA הערך מייצג את הכוח שבו משתמשים המסילות של המעבד כשהן פועלות במהירויות שונות. צריך להגדיר את המהירות המקסימלית בליבה (kernel) לכל אחת מהמהירויות המותרות ולחבר את המעבד למהירות הזו. המספר והסדר של הרשומות תואמים למספר ולסדר של הרשומות ב-cpu.speeds.
cpu.clusters.cores מספר הליבות בכל אשכול מעבדים. 4, 2 נדרשת רק במכשירים עם ארכיטקטורות מעבדים הטרוגניות. מספר הרשומות והסדר צריכים להתאים למספר הרשומות באשכול של cpu.active ו-cpu.speeds. הערך הראשון מייצג את מספר ליבות המעבד באשכול cluster0, הערך השני מייצג את מספר ליבות המעבד באשכול cluster1 וכן הלאה.
battery.capacity קיבולת הסוללה הכוללת במיליאמפר לשעה. 3,000 mAh -

סריקות Bluetooth ו-Low Energy (LE)

במכשירים עם Android 7.0, המערכת אוספת נתונים על סריקות של צריכת אנרגיה נמוכה (LE) ועל תעבורת נתונים ברשת Bluetooth (כמו RFCOMM ו-L2CAP), ומשייכת את הפעילויות האלה לאפליקציה שהפעילה את הסריקה. סריקות Bluetooth משויכות לאפליקציה שהפעילה את הסריקה, אבל סריקות באצווה לא משויכות לאפליקציה (ומשויכות במקום זאת לאפליקציית Bluetooth). לביצוע סריקה של אפליקציה במשך N אלפיות השנייה, עלות הסריקה היא N אלפיות השנייה של זמן rx ו-N אלפיות השנייה של זמן tx. כל הזמן שנותר בבקר מוקצה לתנועה ברשת או לאפליקציית ה-Bluetooth.