מדידת ערכי הספק

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

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

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

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

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

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

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

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

  • ‫cluster0 מורכב מ-cpu0-3
  • ‫cluster1 מורכב מ-cpu4-7

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

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

<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.

שם תיאור ערך לדוגמה פתקים
ambient.on יותר חשמל נצרך כשהמסך במצב שינה, במצב סביבה או במצב 'תמיד פעיל' במקום במצב כבוי. בסביבות 100 mA -
screen.on צריכת חשמל נוספת כשהמסך מופעל בבהירות מינימלית. ‫200 mA כולל בקר מגע ותאורה אחורית של המסך. בבהירות 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 mA -
אודיו צריכת חשמל נוספת כשמפענחים או מקודדים אודיו באמצעות DSP. בסביבות 10 mA משמש לאודיו של DSP.
סרטון צריכת חשמל נוספת כשמפענחים סרטון באמצעות DSP. בסביבות 50 mA משמש לסרטונים ב-DSP.
camera.avg ממוצע צריכת החשמל על ידי מערכת המשנה של המצלמה באפליקציית מצלמה טיפוסית. ‫600 mA הערכה גסה של אפליקציה שמריצה תצוגה מקדימה ומצלמת בערך 10 תמונות ברזולוציה מלאה בכל דקה.
camera.flashlight ההספק הממוצע שמשמש את מודול הפלאש של המצלמה כשהוא פועל. ‫200 mA -
gps.signalqualitybased הסוללה נגמרת מהר יותר בגלל השימוש ב-GPS, בהתאם לעוצמת האות. זהו ערך מרובה, אחד לכל עוצמת אות, מהחלש ביותר לחזק ביותר. ‫30 mA, ‏ 10 mA -
gps.on צריכת חשמל נוספת בזמן ש-GPS מחפש אות. ‫50 mA -
radio.active צריכת חשמל נוספת בזמן שידור או קליטה של רדיו סלולרי. ‫100 mA-300 mA -
radio.scanning צריכת חשמל נוספת בזמן שהרדיו הסלולרי שולח אותות זימון למגדל. ‫1.2 mA -
radio.on צריכת חשמל נוספת כשהרדיו הסלולרי מופעל. זהו ערך מרובה, אחד לכל עוצמת אות (ללא אות, חלשה, בינונית, חזקה). ‫1.2 mA חלק ממכשירי הרדיו מגבירים את עוצמת השידור כשהם מחפשים אנטנה סלולרית ולא מזהים אות. הערכים יכולים להיות זהים או לרדת ככל שעוצמת האות עולה. אם תספקו רק ערך אחד, אותו ערך ישמש לכל רמות החוזק. אם תספקו שני ערכים, הראשון ישמש למצב ללא אות, השני ישמש לכל שאר העוצמות וכן הלאה.
bluetooth.controller.idle הזרם הממוצע (במיליאמפר) שצורך בקר ה-Bluetooth כשהוא לא פעיל. - הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קבלה או שידור, המערכת מחשבת את הממוצע של המצבים האלה. בנוסף, המערכת אוספת עכשיו נתונים לגבי סריקות Bluetooth וסריקות של Bluetooth עם צריכת אנרגיה נמוכה (LE).

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

סריקות Bluetooth ו-LE

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