>> >> + file.open("/sys/class/drm/card0/power/rc6_residency_ms", ios::in); >> + >> + if (file) { >> + handle_i965_gpu(); >> + file.close(); >> + } >> + > > side note: just wonder how much C++ stream with its heavy buffering, etc. is slower > than stat(). I'll review and if it makes sense will probably prepare simple stat() > wrapper to lib.cpp better to use access() than stat. both have the fun of getting a bunch of low level system headers into C++ I'm sure that'll work most of the time, but for something as non-time critical as this I wonder how badly that is inviting trouble. >> + >> + if (line_nr == 0) >> + d = 100.0 - ratio * (rc6_after + rc6p_after + rc6pp_after - rc6_before - rc6p_before - rc6pp_before); >> + if (line_nr == 1) >> + d = ratio * (rc6_after - rc6_before); >> + if (line_nr == 2) >> + d = ratio * (rc6p_after - rc6p_before); >> + if (line_nr == 3) >> + d = ratio * (rc6pp_after - rc6pp_before); >> + if (line_nr >= 4 || line_nr < 0) >> + return buffer; >> + > > small side note /* someone will do it anyway :-) */: > how about > > if (line_nr == 0) > d = 100.0 - ratio * (rc6_after + rc6p_after + rc6pp_after - rc6_before - rc6p_before - rc6pp_before); > else if (line_nr == 1) > d = ratio * (rc6_after - rc6_before); > else if (line_nr == 2) > d = ratio * (rc6p_after - rc6p_before); > else if (line_nr == 3) > d = ratio * (rc6pp_after - rc6pp_before); > else if (line_nr >= 4 || line_nr < 0) > return buffer; well last time I looked at the disassembly for such a case, this generated worse code. I'll admit that that was about 2 gcc versions ago though.