Correct X event CTM calculation for multi-monitor case

When there are multi-monitors, X will scale the touch event's
coordinate from device coordinate to screen coordinate. We then
in Chrome compute a CTM that will scale/translate the X events
to the correct RootWindow's bounds. The scaling in X are done
in floating points but when finally converted to ui::TouchEvent's
location as integers, there could be +-1 happening which could
make the touch events appear as out of bound of any RootWindow
and thus get lost. One symptom is that when move fingers to the
upper edge of external monitor and lift, the touch release event
could be lost and the finger seems get stuck on the screen.
 
We have a small fix in calculating CTM X/Y scale/offset by using
framebuffer_width/height - 1 instead of framebuffer_width/height.

Also when converting X event's coordinate to ui::TouchEvent's
location, use rounding instead of static_cast<int>(double),
which seems more correct.

BUG=315942
TEST=Connect Pixel to external touch monitor, turn on HUD projection
     by Ctrl + Shift + 9. Move fingers on external monitor to edges
     and lift. Make sure no fingers get stuck at the edges.

Review URL: https://codereview.chromium.org/69653002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234871 0039d316-1c4b-4281-b951-d872f2087c98
Include <unistd.h> in base/process/internal_linux.h.

When building with libc++, this causes a build error due to missing definition
for pid_t.

BUG=318770
R=thakis@chromium.org

Review URL: https://codereview.chromium.org/69763003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234872 0039d316-1c4b-4281-b951-d872f2087c98
SVN changes up to revision 234872