Kivy - 畫布壓力測試



在本章中,我們將瞭解圖形引擎的效率如何。這可以透過向 Kivy 物件的畫布新增大量圖形指令來實現。

下面給出的程式測量了圖形引擎繪製一萬個隨機位置和隨機顏色值的矩形所需的時間。因此,它將評估畫布可以承受多少壓力。

語法

使用以下語法在任何 Kivy 小部件的畫布上繪製矩形指令:

with self.root.canvas:
   Color(r,g,b,a)
   Rectangle(pos, size)

我們將為 RGB 以及矩形的 x 和 y 座標生成隨機值,並顯示 10,000 個矩形。使用 perf_counter() 函式計算為此花費的時間。

t1=perf_counter()
with self.root.canvas:
   for i in range(10000):
      Color(r,g,b,a)
      Rectangle(pos, size)
      t2=perf_counter()

繪製所需的時間將是“t2 - t1”。它將顯示在 Kivy 應用視窗的標題欄上。

示例

完整的程式如下所示:

from kivy.app import App
from kivy.graphics import *
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from random import random as r
from time import perf_counter
from kivy.core.window import Window

Window.size = (720, 400)

class StresstestApp(App):
   def add_rects(self, *args):
      self.t1 = perf_counter()
      with self.root.canvas:
         for i in range(10000):
            Color(r(), 1, 1, mode='hsv')
            Rectangle(
               pos=(r() * self.root.width + self.root.x, r() * self.root.height + self.root.y),
               size=(20, 20)
            )
            self.t2 = perf_counter()
      self.title = str(self.t2 - self.t1) + "Sec. to draw 10000 rectangles"
      
   def build(self):
      main = GridLayout(cols=1)
      self.root = FloatLayout(size=(Window.width, 100))
      self.btn1 = Button(
         text='start', size_hint=(1, None),
         pos_hint={'center_x': .5, 'center_y': .1}
      )
      self.btn1.bind(on_press=self.add_rects)
      self.root.add_widget(self.btn1)
      main.add_widget(self.root)
      return main
      
StresstestApp().run()

輸出

執行程式並點選“開始”按鈕。

Kivy Canvas Stress

您將在標題欄中看到繪製所需的時間,如下面的圖所示:

Kivy Canvas Stress Title Bar
廣告

© . All rights reserved.