2012-07-16 34 views
14

Tôi đã mã hóa một công cụ nhỏ để hiển thị 5 sprites bằng javascript trong Canvas2D. Mọi thứ hoạt động tốt và hoàn toàn được tối ưu hóa.Hành vi lạ với google chrome và FPS

FPS dao động từ 30 đến 60 - nhưng điều thú vị là, nó nói trên 60 fps liên tục khi bảng điều khiển google javascript mở!

Bất kỳ người nào khác đang gặp phải vấn đề này?

n.b. Tôi đang sử dụng requestAnimationFrame

Edit:

Ví dụ: http://jsfiddle.net/jrPNy/1

chơi xung quanh với "hạt" Số nên fps của bạn là khoảng 40-50. Hơn mở giao diện điều khiển, và nó đi lên đến 60 khung hình/giây. (Chrome 21.0.1180.83)

+1

Đây có phải là vấn đề trọng tâm không? Chrome có thể cố tình hạ thấp FPS khi nghĩ rằng trang không có tiêu điểm và việc mở bàn điều khiển có thể bằng cách nào đó kích hoạt hành vi luôn tập trung. – apsillers

+0

Không thể nhìn thấy nó là vấn đề trọng tâm vì tab luôn giữ trọng tâm. Khi tiêu điểm bị mất, khung hình/giây sẽ chuyển thành 0, như mong đợi. –

+0

Bạn có một số mã chúng ta có thể xem? – Jarrod

Trả lời

5

Là tác giả câu hỏi đã nhận xét trong nhận xét, điều này có liên quan đến vùng canvas có thể nhìn thấy. Mở bảng điều khiển làm giảm chiều cao của chế độ xem, mà trên màn hình có kích thước bình thường có nghĩa là sẽ có ít nội dung hơn để hiển thị. 60 FPS là một giới hạn mềm được đưa ra bởi tốc độ làm tươi màn hình; làm khung hình nhiều hơn điều đó sẽ không có ý nghĩa vì nó không thể hiển thị hơn 60 khung hình mỗi giây trên một màn hình bình thường.

Tôi đã thử nghiệm điều này trên máy của mình, giảm tốc độ CPU sao cho tôi không luôn nhận được 60FPS. Trong ví dụ Fiddle được cung cấp, tôi có khoảng 24FPS bình thường. Việc mở Bảng điều khiển đã giảm kích thước khung hình hiển thị xuống còn khoảng 60% kích thước ban đầu của nó và FPS tăng trung bình 30. Thay đổi kích thước giao diện điều khiển sẽ ảnh hưởng đến FPS cho phù hợp: với chỉ 10% của canvas có thể nhìn thấy, FPS xoay quanh 42, và với một giao diện điều khiển rất nhỏ và toàn bộ canvas có thể nhìn thấy, FPS đã đi hơi thấp hơn giá trị ban đầu, đến 23. Tăng Tốc độ CPU mang FPS đến một hằng số 60, bất kể trạng thái của Console.

Bây giờ, do JavaScript tạo màn hình vẫn đang chạy, bất kể canvas có thể nhìn thấy bao nhiêu, ảnh hưởng đến sức mạnh xử lý cần thiết là kết xuất thực tế của canvas và cách hình ảnh canvas được tổng hợp vào phần còn lại của HTML, trên cửa sổ trình duyệt và cuối cùng lên màn hình. Ngày càng có nhiều công việc được chuyển đến GPU, vì vậy khi mọi giai đoạn của quá trình tổng hợp sẽ được thực hiện trong OpenGL, FPS sẽ luôn được max.

+2

sau đó chúng tôi không trải nghiệm những điều tương tự, tôi đã kích hoạt Tăng tốc 2D Canvas. Trong một trò chơi tôi phát triển ngay bây giờ chrome chỉ cho tôi 30fps. Với giao diện điều khiển tôi có hằng số 60. Và kích thước canvas không nhỏ hơn, không phải phần xem trên canvas. Tôi đặt giao diện điều khiển gần như có thể nhìn thấy ở phía dưới, vì vậy tôi nhận được một phát triển smoth. – fehrlich

+0

Thật kỳ lạ ... Vì vậy, bất cứ khi nào bàn điều khiển bị tắt, tốc độ khung hình giảm xuống còn 30 và bất kỳ lúc nào nó được kích hoạt lại, FPS sẽ quay trở lại 60? –

+1

có exaclty như thế này, nó không phải là khá xấu trong ví dụ fiddle nhưng theres cũng là một hiệu ứng có thể nhìn thấy. Tôi đã thêm một video để bạn có thể hiểu ý tôi. – fehrlich

-1

Google chrome sử dụng vsync có nghĩa là nó sẽ giới hạn FPS cho giới hạn FPS màn hình của bạn, Hầu hết màn hình là 60 FPS để bạn có thể so khớp nếu có thể nhưng không vượt lên trên. Có thể có một chương trình để loại bỏ các vsync nhưng tôi biết rằng trình điều khiển Nvidia có thể kiểm soát này, nhưng bạn sẽ cần một GTX 610 hoặc cao để làm điều này

0

Tôi đã trải nghiệm điều tương tự với chrome trên macbook của tôi. Có vẻ như dock osx đang làm tốc độ khung hình chậm lại, khi bạn mở giao diện điều khiển, khung nhìn được di chuyển ra xa đủ xa từ thanh dock để tốc độ khung hình quay trở lại lên tới 60 khung hình/giây. Nếu bạn di chuyển cửa sổ ra khỏi dock, tốc độ khung hình sẽ tăng lên. Bạn có thể có chế độ toàn màn hình 60 khung hình/giây mà không cần bàn điều khiển mở nếu bạn tự động gắn đế.